void main()
{
printf("ABCD");
printf("\n");
printf("ABCD" +1);
printf("\n");
printf("ABCD" +3);
}输出为:
ABCD
BCD
D有人能给我解释一下原因吗?
发布于 2011-06-29 03:17:25
"ABCD"实际上是一个字符数组{'A','B','C','D', '\0'} (其中'\0'是尾随的空字节)。如果再加上3,就相当于将指针从A向前推进了3个字节,所以最终指向了D。
clearer 6.2 in the C FAQ有一张图片,让这一点变得更加清晰。该数组会像6.4中描述的那样衰减为一个指针,因此出现了变量p的情况。
char a[] = "hello";
char *p = "world";

发布于 2011-06-29 03:17:55
"ABCD"被视为指向一个内存块的指针,该内存块包含四个字符,后跟一个空终止符(\0)。
"ABCD" + 1将1添加到指针,使其指向更远的一个字节。
https://stackoverflow.com/questions/6511917
复制相似问题