Проблема с указателями массива в C - PullRequest
0 голосов
/ 11 февраля 2012

Я разбирал вопросник GATE за последние годы, где я застрял с этим вопросом

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

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

Ответ «2011»

Мне известно, что в c переменные массива являются указателем на первый адрес массива.Мой логический ответ был «E2011», но на выходе получилось: 2011

Может кто-нибудь объяснить математику указателя, связанную с этим?

Ответы [ 2 ]

7 голосов
/ 11 февраля 2012

Эта проблема имеет много больше общего с значениями 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

Следовательно, p [4] = 2011

3 голосов
/ 11 февраля 2012

p [3] = A

p [1] = E

E - A = 4

, следовательно, p + 4 = адрес 2

следовательно печатает 2011

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