簡體   English   中英

C - function 內的指針指向顯示無效字符的數組

[英]C - Pointer inside a function pointing to an array displaying invalid character

我有一個數組 product[6] 和一個指向該數組的指針 (*productPtr)。 當我將指針作為參數傳遞給名為 productCheck 的 function 並嘗試打印其中一個字符時,我從產品數組中讀取的字符無效。 非常感謝任何有關為什么會發生這種情況的幫助。 例如,如果 i = 3,而不是讀取 'u',output 是 '{'。

int i = 3;    
char product[6] = "xddua";
char * productPtr;
productPtr = product;


bool productCheck(int i, char * productPtr);


productOk = productCheck(i, &product);


bool productCheck(int i, char * productPtr)
{    
    printf("product is %c\n", *productPtr + i);

function 具有char *類型的第二個參數。

bool productCheck(int i, char * productPtr);

您正在調用 function 傳遞表達式表達式&product作為第二個參數

productOk = productCheck(i, &product);

由於數組產品被聲明為

char product[6] = "xddua";

那么表達式 ^product 的類型是char ( * )[6] 即參數的類型與 function 參數的類型不兼容。

您需要像這樣調用 function

productOk = productCheck(i, product);

或喜歡

productOk = productCheck(i, productPtr);

在 function 內取消引用此語句中表達式&product的傳遞值

printf("product is %c\n", *productPtr + i);

然后在結果表達式中添加值i而不是首先將值i添加到指針然后取消引用指針表達式。

因此,您需要像這樣調用 function

productOk = productCheck(i, product);

或喜歡

productOk = productCheck(i, productPtr);

在 function 中,您需要編寫

printf("product is %c\n", *( productPtr + i ) );

或者

printf("product is %c\n", productPtr[i] );

一元*運算符的優先級高於+運算符。

*productPtr + i首先讀取productPtr指向的內容,然后將i添加到讀取的值。

要訪問另一個元素,您應該編寫*(producePtr + i)productPtr[i]

論點&product也不好。 表達式中的大多數 arrays 會自動轉換為指向第一個元素的指針(一個例外是一元&的操作數),因此傳遞char*值應該是product

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM