3分钟学会C++递增递减运算符和解引用运算符的优先级

前缀++、–运算符优先级和解引用运算符*相等,从右向左结合

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];

  //2
  cout << (*p)++ << endl;//()加持,先解引用后再将值+1(指针依然指向ai[0]的地址)
  return 0;

猜你喜欢

转载自blog.csdn.net/baidu_38495508/article/details/122408385