我去年解决了GATE问题论文,我坚持这个问题
C程序的以下片段是什么打印的?
char c[]="GATE2011";
char *p =c;
printf ("%s", p+p[3]-p[1]);
答案是“2011”
我知道在c中,数组变量是指向数组第一个地址的指针。我的逻辑答案是'E2011',但输出是 2011
有人可以解释这涉及的指针数学吗?
答案 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