我正在解决去年的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年
有人可以解释这涉及的指针数学吗?
这个问题与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