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