int a[3]={10,20,30};
int* p = a;
cout << *p++ << endl;
В соответствии с википедия, суффикс ++
имеет более высокий приоритет, чем разыменование, *p++
должен бежать p++
сначала, а затем разыменование и результат должен быть 20, но почему фактический результат равен 10?
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;