为什么我们不能在数组名称中使用间接寻址运算符?



在下面的代码中,为什么我不能取消引用数组名,因为当一个数组作为参数传递给函数时,它就变成了指向数组第一个元素的指针,那么为什么我们不能取消引用呢?

#include <stdio.h>
int main(void) {
    char s[] = "radha";
    int a[2] = {0,1};
    printf("%s ", *s);
    printf("%d", *a);
    return 0;
}

上面的代码有分割错误,这里是什么原因,当我使用a[0]时,它在内部转换为*(a+0(,那么简单地做*a或*S有什么问题,请澄清。

printf("%s ",*s);期望第二个参数在您传递char 'r'时是指向字符串的指针(取消引用s会按预期为您提供第一个数组项(。

我对你的有两个建议,

  1. 阅读文档。

    • "%s"说明符期望指针为 char ,您正在传递一个char,该然后被视为整数并取消引用,就好像它是导致未定义行为的指针一样。

    如果您阅读文档,并了解char[]转换为char *取消引用char * poitner 会给您带来char,那么您就会明白为什么这是错误的。

  2. 启用编译器警告。如果这样做,则警告您传递了错误的类型将为您节省大量时间,并让您了解有关如何调用给定函数的更多信息。

    如果你忽略了警告,情况会更糟。除非事先知道编译器会抱怨某些事情,否则您永远不应该忽略警告。如果警告不是预期的,那么它很可能是一个错误。

最新更新