我试图理解数组和指针之间存在的特殊关系,即没有括号的数组名称总是指向数组的第一个元素。
在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是否都等效?
我至少希望它(//Conflict(打印一些其他(垃圾?(值,但不打印数组的实际值。
%s
此命令告诉printf
将参数视为指向包含字符数组的内存位置的指针,并打印每个字符,直到遇到