C中的数组指针有问题

时间:2012-02-11 04:18:44

标签: c arrays pointers

我去年解决了GATE问题论文,我坚持这个问题

  

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

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

答案是“2011”

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

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

2 个答案:

答案 0 :(得分:7)

这个问题 ASCII values有关,而不是指针。

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

因此,p [4] = 2011

答案 1 :(得分:3)

p [3] = A

p [1] = E

E - A = 4

因此p + 4 =地址2

因此它打印2011