Программа c из бумаги GATE

Привет всем вчера, я дал свой экзамен 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"