首先,我读到:
只要“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”的指针,如果我没有记错的话,“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
?
我的问题:
- 当放在数组名称之前时,是否会简单地忽略“&”?
数组名称对此很特殊吗?
- 如果是这样,编译器如何验证“&”后面的标识符是对数组的引用?它实际上是否在声明的数组列表中搜索它?