20170825_*p++、(*p)++、*++p、++*p 的区别:
int a[5]={1,2,3,4,5};
int *p = a;
另:* 与 ++ 是同优先级的,而且结合性都是从右往左的。
而计算 p++ 是先赋值再加1,所以 *p++ 就是先按结合性从右往左计算,此时相当于*(p++),先计算 p++ 即 i ( 此时相当于i=p++),所以先把 p++ 的值赋给 i,赋值后 i 的值就等于 p 了( 此时的 p 指的是 未加 1 的 p,而且在这个同时 p 也加 1 了),再计算
*(i)即 *p 。
说到底,*p++ 的值就等于 *p 的值,++ 根本与其结果不相干,虽然 p 在赋值后也加1了,但根本不影响 *p++ 的值,关键就是:
先赋值后才加1的。
1、*p++;
先取指针 p 指向的值(数组第一个元素 1),再将指针 p 自增 1,p 已经指向下一个元素了;
另:等同于 *p; 和 p++; 两步操作合二为一了。
cout << *p++; // 结果为 1
cout <<(*p++); // 1
2、(*p)++;
先取指针 p 指向的值(数组第一个元素 1),再将该值自增1(数组第一个元素变为 2),而 p 的指向没有发生变化。
cout << (*p)++; // 1
cout <<((*p)++); //2
3、*++p;
先将指针 p 自增 1(此时指向数组第二个元素),* 操作再取出该值。
cout << *++p; // 2
cout <<(*++p); //2
4、++*p;
先取指针 p 指向的值(数组第一个元素1),再将该值自增 1(数组第一个元素变为2)。
cout <<++*p; // 2
cout <<(++*p); //2
注意,上面的每条 cout 输出,要单独输出才能得到后面的结果。