2016-07-27 2 views
0

Следующая программа дает выходные данные как 17,29,45; Я не могу понять, что означает **++pp;. Может кто-нибудь объяснить программу в деталях.Указатель на разыменование указателя с оператором pre-increment

#include <stdio.h> 

    int main() { 
     static int a[] = {10, 22, 17, 29, 45}; 
     static int *p[] = {a, a + 2, a + 1, a + 4, a + 3}; 
     int **pp = p; 
     **++pp; 
     printf("%d %d %d", **pp, *pp[3], pp[0][2]); 
    } 

ответ

3

В коде **++pp; такое же, как * (* (++pp));. Он сначала увеличивает указатель, затем уклоняется дважды (первый результат разыменования имеет тип указателя, который должен быть уточнен).

Однако значение, полученное путем разыменования, не используется. Если вы включили предупреждения компилятора, вы получите, чтобы увидеть что-то вроде

предупреждение: значение, рассчитанное не используется

Вы можете удалить разыменования, это не имеет смысла.

+0

Причина для подсказки? –

+0

вывод затрагивается, когда я прокомментирую это утверждение –

+1

@NikhilVerma Я не прошу прокомментировать заявление, удалить разыменования, использовать '++ pp;', и вы получите тот же результат. –

Смежные вопросы