[英]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.