Printf(“ABCD”); printf(“ABCD”+1);

时间:2011-06-28 19:16:12

标签: c

void main()

{

printf("ABCD");

   printf("\n");

   printf("ABCD" +1);

   printf("\n");

   printf("ABCD" +3);

}

输出是:

ABCD

BCD

D

任何人都可以解释我为什么吗?

2 个答案:

答案 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";

Picture from C FAQ

答案 1 :(得分:5)

"ABCD"被视为指向内存块的指针,该内存块包含四个字符,后跟一个空终止符(\0)。

"ABCD" + 11添加到指针,使其进一步指向一个字节。