我试图了解数组和指针之间存在的特殊关系,即不带括号的数组名称始终指向数组的第一个元素。
在 Linux 系统上,我通过 C 程序得到这个:
char name[7] = "unique";
printf("\nAddress stored of name: %p", name);
printf("\nAddress stored of name: %s", name); //Conflict
printf("\nAddress of name[0]: %p", &name[0]);
//dereferencing the pointer
printf("\nValue of name[0]: %c", *name);
printf("\nValue of name[1]: %c", *(name+1));
输出是:
Address stored of name: 0xbff68131
Address stored of name: unique
Address of name[0]: 0xbff68131
Value of name[0]: u
Value of name[1]: n
我理解上述输出中的所有内容,但代码行的输出为//Conflict。换句话说,如果根据数组和指针之间的特殊关系, name等价于&name[0],那么为什么简单地更改格式说明符(从 %p 到 %s)会打印出数组的实际值。如果确实如此,那么这是否意味着name、&name[0]和*name都是等价的?
我至少希望它(//冲突)打印一些其他(垃圾?)值,而不是数组的实际值。