Разъяснение по арифметике указателей - PullRequest
1 голос
/ 23 февраля 2011
*(*(p+a)+b)

Если к адресу добавлен размер * (p), то почему размер * добавляется к * (p + a)? * (p + a) представляется значением в этом месте, и добавление к нему размера b * изменит его значение, а не адрес. Однако, исходя из того, что я прочитал, это означает, что он должен быть добавлен к адресу.

1 Ответ

4 голосов
/ 23 февраля 2011

Учитывая ваше выражение и предполагая, что вы говорите о C, p должен быть указателем на указатель. Что происходит, это:

char ** p;
int a = 2;
int b = 4;

(p+a) // adds 2 * sizeof(char *)
*(p+a) // evaluates to a char *
char * c = *(p+a)
(c+b) // adds 4 * sizeof(char)
*(c+b) // evaluates to a char
...