C中的数组指针有问题

Abh*_*tha 0 c arrays pointers

我正在解决去年的GATE问题论文,我坚持这个问题

以下C程序片段打印什么?

char c[]="GATE2011";
char *p =c;
printf ("%s", p+p[3]-p[1]);
Run Code Online (Sandbox Code Playgroud)

答案是'2011'

我知道在c中,数组变量是指向数组第一个地址的指针.我的逻辑答案是"E2011",但输出是2011年

有人可以解释这涉及的指针数学吗?

abe*_*nky 7

这个问题与ASCII值很大关系,而与指针有关.

p[3] == 'E' == 69 (decimal)
p[1] == 'A' == 65 
p[3]-p[1] = 4

p+4 = A string starting at the 4th character.

p[] = [0] [1] [2] [3] [4] [5] [6] [7] [8]
       G   A   T   E   2   0   1   1  \0
Run Code Online (Sandbox Code Playgroud)

因此,p [4] = 2011

  • 好吧,它是关于*混合*指针和ASCII值:) (2认同)