gpt4 book ai didi

c - 关于 c 中的表达式 "&anArray"

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:45 24 4
gpt4 key购买 nike

首先,我读到:

  • 数组
  • &array
  • &array[0]

只要“array”真的是一个数组,一切都是一样的。所以我尝试了:

int main(){ 
char ar[]={'a','b','c','\0'};
printf("argument: &ar %s\n",&ar);
printf("argument: &ar[1] %s\n",&ar[1]);
}

输出:

argument:&ar   abc  
argument:&ar[1] bc

&ar 似乎被当作第一个元素的指针,而不是指向“ar”的指针,如果我没记错的话,它本身就是一个指向第一个元素的指针。

因为这不应该是 &(指向字符的指针) 的处理方式,我尝试过:

char a='s';
char *pa=&a;
printf("argument: &pa %c\n",&pa);

%c 的输出甚至不是一个字符。也不应该是指向数组第一个元素的指针的处理方式。我试过:

char *pa=&ar[0];
char **ppa= &pa;
printf("argument: &pa %s\n", ppa);

%s 的输出毫不奇怪,毫无意义;但为什么 &ar 不是胡说八道?因为如果 ar 是一个指针,那么 &ar 不应该像 ppa 一样是一个指向指针的指针吗?

我的问题:

  1. 放在数组名前的“&”会被忽略吗?数组名称在这方面只是特殊的吗?
  2. 如果是,编译器如何验证“&”后面的标识符是对数组的引用?它实际上是否在声明的数组列表中搜索它?

最佳答案

Seems that &ar is taken as a pointer to the first element instead of a pointer to "ar", which itself is a pointer to the pointer of the first element if I am not mistaken.

错了。 &ar是指向数组 ar 的指针, 但数组 ar 不是任何类型的指针(它是一个数组),所以 &ar不是指向指针的指针。

数组是连续的对象序列 - 在 ar 的情况下, 它是一组连续的 4 char秒。 &ar是一个指针指向这组 4 个字符,这必然意味着它指向与 &ar[0] 相同的位置, 指向第一个 char 的指针在那个集合中。不过它有不同的类型:&ar类型为 char (*)[4]这意味着“指向 4 个字符的数组的指针”和 &ar[0]类型为 char * ,意思是“指向字符的指针”。

混淆的产生是因为在几乎所有的表达式中,ar计算结果为指向数组第一个元素的指针(异常(exception)情况是它是一元 & 运算符或 sizeof 运算符的操作数)。这并不意味着 ar 虽然是一个指针 - 它不是 - 只是在大多数情况下它计算为一个指针值。

关于c - 关于 c 中的表达式 "&anArray",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com