20170825_*p++、(*p)++、*++p、++*p 的区别

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 输出,要单独输出才能得到后面的结果。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值