【问题标题】:Unable to pass reference of array to method in C无法将数组的引用传递给C中的方法
【发布时间】: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[]) {

我以为我正在将地址 (&amp;binary) 传递给指针参数指向的方法。为什么我收到错误消息,告诉我应该是 char **?

【问题讨论】:

  • binary 不是指针,而是地址。因此,&amp;binary 只是一个指针,而不是双星指针。我的意思是,函数装饰void readBinaryInput(char binaryString[]) 就足够了;试试不带*。
  • @ssd binary 是一个字符数组 (char[]),而不是地址。这取决于它在哪里使用。
  • @bool3max:不完全是!数组返回绝对内存地址,数据实际存放在该地址上;而指针是sizeof(uintptr_t) 长度的内存空间,指向数据所在的地址。你最好测试粘贴here或here的代码。
  • @ssd 您的示例与我发布的评论无关。它讨论了指针指向的地址与存储(定位)指针的地址。我说的是在某些情况下数组被衰减为指针的概念,而不是在其他情况下。例如,当用作 sizeof 运算符的参数时,它会 not 衰减:根据 OP 的示例,sizeof(binary) 将返回 BYTE_LEN,not sizeof(uintptr_t)。当用作右值或函数的参数时,它将衰减为指向该数组第一个元素的指针。

标签: c pointers pass-by-reference


【解决方案1】:

尝试从&amp;binary 中删除&amp;,从char *binaryString[] 中删除*。

char binary[BYTE_LEN] 已经是一个指针(本质上等同于char*)。它是指向 char 数组中第一个字节的指针。照此处理。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多