C программа из бумаги GATE - PullRequest
4 голосов
/ 14 февраля 2011

Привет всем вчера, я сдал экзамен GATE, и на этом экзамене возник вопрос:

Что печатает следующий фрагмент C-программы?

char c [] = "GATE2011";
char *p =c;
printf ( "%s", p+p [3] − p [1]) ;

Параметры:

(A) GATE2011
(B) E2011
(C) 2011
(D) 011

Ответ: 'C'. когда я попробовал код на моем компьютере, но как ??

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 14 февраля 2011

Арифметика указателя:

char c [] = "GATE2011";
// indices:  01234567
char *p =c;

p[1] - это A символьный код, p[3] - E символьный код, их различие (E код минус A код) равно4, эта разница затем добавляется к указателю p, и вы получаете адрес подстроки 2011, переданной в printf().

0 голосов
/ 04 августа 2011

Здесь p [3] = E p [1] = A ascii A -> 65 и E -> 69 69-65 = 4 p + 4 будет указывать на 4-й индекс строки GATE2011 01234567

SO ... 2011 char[c]="GATE2011"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...