前缀++、–运算符优先级和解引用运算符*相等,从右向左结合
int main() {
array<int, 5> ai={1,2,3,4,5};
int* p = &ai[0];
//2
cout << *++p << endl;//将指针p指向的地址+1后再解引用(指针指向ai[1]的地址)
return 0;
}
int main() {
array<int, 5> ai={1,2,3,4,5};
int* p = &ai[0];
//2
cout << ++*p << endl;//解引用后得到ai[0]的值(1),再将值+1(指针依然指向ai[0]的地址)
return 0;
后缀++、–运算符优先级比解引用运算符*高,所以两个运算符从左向右结合,看不懂这句话可看下例
int main() {
array<int, 5> ai={1,2,3,4,5};
int* p = &ai[0];
//1
cout << *p++ << endl;
//由于++是后缀的,所以先解引用p(从左向右结合),
//由于后缀++优先级高于*,最后将++运算符用于p而不是*p,
//输出1之后将指针p指向数值第二个元素ai[1]的地址。
return 0;
int main() {
array<int, 5> ai={1,2,3,4,5};
int* p = &ai[0];
//1
cout << (*p)++ << endl;//()加持,先解引用后再将值+1(指针依然指向ai[0]的地址)
return 0;