void main()
{
printf("ABCD");
printf("\n");
printf("ABCD" +1);
printf("\n");
printf("ABCD" +3);
}
输出是:
ABCD
BCD
D
任何人都可以解释我为什么吗?
答案 0 :(得分:16)
"ABCD"
实际上是一个字符数组{'A','B','C','D', '\0'}
(其中'\0'
是尾随空字节)。如果你添加3,那么这相当于从A向前推进3个字节的指针,所以你最终指向D
。
问题6.2 in the C FAQ有一张图片可以让我更清楚。数组衰减为6.4中描述的指针,因此您了解变量p
的情况。
char a[] = "hello";
char *p = "world";
答案 1 :(得分:5)
"ABCD"
被视为指向内存块的指针,该内存块包含四个字符,后跟一个空终止符(\0
)。
"ABCD" + 1
将1
添加到指针,使其进一步指向一个字节。