【发布时间】:2019-11-24 15:55:20
【问题描述】:
我创建了一个 char 数组,并希望将对它的引用传递给填充数组的方法。
char binary[BYTE_LEN];
readBinaryInput(&binary);
方法如下。
void readBinaryInput(char *binaryString[]) {
printf("Enter an 8-bit binary string.\n");
int i;
for(i = 0; i < BYTE_LEN; i++) {
scanf("%s", binaryString[i]);
}
}
当我运行调用该方法的程序时,出现以下错误。
warning: passing argument 1 of 'readBinaryInput' from incompatible pointer type [-Wincompatible-pointer-types]
readBinaryInput(&binary);
note: expected 'char **' but argument is of type 'char (*)[8]'
void readBinaryInput(char *binaryString[]) {
我以为我正在将地址 (&binary) 传递给指针参数指向的方法。为什么我收到错误消息,告诉我应该是 char **?
【问题讨论】:
-
binary不是指针,而是地址。因此,&binary只是一个指针,而不是双星指针。我的意思是,函数装饰void readBinaryInput(char binaryString[])就足够了;试试不带*。 -
@ssd
binary是一个字符数组 (char[]),而不是地址。这取决于它在哪里使用。 -
@ssd 您的示例与我发布的评论无关。它讨论了指针指向的地址与存储(定位)指针的地址。我说的是在某些情况下数组被衰减为指针的概念,而不是在其他情况下。例如,当用作
sizeof运算符的参数时,它会 not 衰减:根据 OP 的示例,sizeof(binary)将返回BYTE_LEN,notsizeof(uintptr_t)。当用作右值或函数的参数时,它将衰减为指向该数组第一个元素的指针。
标签: c pointers pass-by-reference