Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么可以';我们是否使用数组名的间接运算符?_C - Fatal编程技术网

C 为什么可以';我们是否使用数组名的间接运算符?

C 为什么可以';我们是否使用数组名的间接运算符?,c,C,在下面的代码中,为什么我不能取消对数组名称的引用,因为当数组作为参数传递给函数时,它将成为指向数组第一个元素的指针,那么为什么我们不能取消对它的引用呢 #include <stdio.h> int main(void) { char s[] = "radha"; int a[2] = {0,1}; printf("%s ", *s); printf("%d", *a); return 0; } #包括 内部主(空){ 字符s[]=“radh

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

#include <stdio.h>
int main(void) {

    char s[] = "radha";
    int a[2] = {0,1};
    printf("%s ", *s);
    printf("%d", *a);
    return 0;
}
#包括
内部主(空){
字符s[]=“radha”;
int a[2]={0,1};
printf(“%s”,*s);
printf(“%d”,*a);
返回0;
}

我在上面的代码中遇到了分段错误,原因是什么,当我使用[0]时,它在内部转换为*(a+0),因此简单地执行*a或*s有什么问题,请澄清。

printf(“%s”、*s)char'r'
时,code>希望第二个参数是字符串指针(取消引用
s
将按预期提供第一个数组项)。

我对您的

  • 阅读文档

    • “%s”
      说明符需要一个
      char
      指针,您传递的是一个
      char
      ,该字符随后被视为整数并取消引用,就好像它是导致未定义行为的指针一样
    如果您阅读了文档,并且了解到
    char[]
    被转换为
    char*
    ,并且取消对
    char*
    poitner的引用将为您提供一个
    char
    ,那么您就会理解为什么这是错误的


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

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


  • printf(“%s”,*s)->
    printf(“%s”,s)
    *s
    =
    s[0]
    =
    'r'
    。您需要
    printf(“%s”,s)
    printf(“%c”、*s)糟糕的问题标题,你应该想一个更好的标题。“如果我给客户看自行车的图片而不是刚买的汽车,为什么我会激怒他?”启用编译器警告。我现在犯了错误,你能解释一下在函数原型中使用char str[]和char*str有什么区别吗。对于函数调用,没有区别。原因是当您将其作为函数参数传递时,
    char[]
    会自动转换为
    char*