Printf("ABCD"); printf("ABCD"+1);

Rav*_*eja 1 c

void main()

{

printf("ABCD");

   printf("\n");

   printf("ABCD" +1);

   printf("\n");

   printf("ABCD" +3);

}
Run Code Online (Sandbox Code Playgroud)

输出是:

ABCD

BCD

D
Run Code Online (Sandbox Code Playgroud)

谁能解释我为什么?

Jef*_*ter 16

"ABCD"实际上是一个字符数组{'A','B','C','D', '\0'}(其中'\0'是尾随空字节).如果你添加3,那么这相当于从A前进3个字节的指针,所以你最终指向D.

C FAQ中的问题6.2有一张图片说明了这一点.数组衰减为6.4中描述的指针,因此您可以了解变量的情况p.

char a[] = "hello";
char *p = "world";
Run Code Online (Sandbox Code Playgroud)

来自C FAQ的图片

  • @Jeft:你现在的答案很迂回:+1 :) (2认同)

SLa*_*aks 5

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

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