разыменование и суффикс ++ приоритет

int a[3]={10,20,30};
int* p = a;
cout << *p++ << endl;

В соответствии с википедия, суффикс ++ имеет более высокий приоритет, чем разыменование, *p++ должен бежать p++ сначала, а затем разыменование и результат должен быть 20, но почему фактический результат равен 10?

1

Решение

p++ использует постфиксный оператор приращения. То есть, это увеличивает p, но возвращает значение, которое присутствовало до приращение. Другими словами, это эквивалентно выполнению чего-то подобного:

int a[3]={10,20,30};
int* p = a;
int* q = p;
++p;
cout << *q << endl;

В таком стиле очевидно, почему 10 печатается.
Если вы хотите увеличить p и вывести его разыменование, вы можете использовать префиксный оператор приращения:

int a[3]={10,20,30};
int* p = a;
cout << *(++p) << endl;
3

Другие решения


По вопросам рекламы [email protected]