Привет всем вчера, я дал свой экзамен GATE, и на этом экзамене возник вопрос:
Что напечатает следующий fragment C-программы?
char c [] = "GATE2011"; char *p =c; printf ( "%s", p+p [3] − p [1]) ;
опции:
(A) GATE2011 (B) E2011 (C) 2011 (D) 011
Ответ – « C
». когда я пробовал код на моем компьютере Но как ??
заранее спасибо
Это арифметика указателя:
char c [] = "GATE2011"; // indices: 01234567 char *p =c;
p[1]
– код символа, p[3]
– код символа E
, их разность (код E
минус код A
) равна 4, эта разница затем добавляется к p
указателю, и вы получили адрес подстроки 2011
printf()
.
Здесь p [3] = E p [1] = A ascii для A -> 65 и E -> 69 69-65 = 4 p + 4 укажет на 4-й индекс строки GATE2011 01234567
SO … 2011 char[c]="GATE2011"