嘿所有昨天我都参加了GATE考试,在这次考试中有一个问题:
C程序的以下片段打印了什么?
char c [] = "GATE2011";
char *p =c;
printf ( "%s", p+p [3] − p [1]) ;
选项:
(A) GATE2011
(B) E2011
(C) 2011
(D) 011
答案是'C
'。当我在我的电脑上尝试代码但是如何?
提前致谢
答案 0 :(得分:5)
那是指针算术:
char c [] = "GATE2011";
// indices: 01234567
char *p =c;
p[1]
是A
个字符代码,p[3]
是E
字符代码,它们的差异(E
代码减去A
代码)是4 ,然后将该差异添加到p
指针,并且您已将2011
子字符串的地址传递到printf()
。
答案 1 :(得分:0)
这里p [3] = E p [1] = A的ascii - > 65和E - > 69 69-65 = 4 p + 4将指向字符串GATE2011的第四个索引01234567
... SO 2011 char[c]="GATE2011"