C语言中的*p1++=*p2++

/*例:把一个数组的内容复制给另一个数组*/
#define SIZE 50
int x[SIZE];
int y[SIZE];
int *p1, *p2;
void try2()
{
    for( p1=x, p2=y; p1-x<SIZE; )
	    *p1++=*p2++;
}
  • *p1++

      后缀++ 操作符的优先级与*操作符一样,但根据结合性右向左,即*p1++ = *(p1++) 

      故执行顺序为:p1++  >> p1+1 >>   *p1 

      注:++*p1,前缀++和*优先级相同,根据操作符结合性从右向左执行,先*后++。

 

  • p++

       先返回p值的一份拷贝然后再增加p的值。

       表达式p++的值就是p原来的值的一份拷贝。

       注:下次再调用p++时,p的值就是之前p+1后的值。

 

  • *p1++=*p2++

   c语言从右往左压栈,

      1.先计算p2++,产生对p2的一份拷贝,

      2.++操作符增加p2的值(将指针p2向后移动1个自身长度的偏移量);

      3.再计算*p2:对p2的拷贝上执行解引用;

      4.再计算p1++,产生对p1的一份拷贝,

      5.++操作符增加p1的值(将指针p1向后移动1个自身长度的偏移量);

      6.再计算*p1:对p1的拷贝上执行解引用;

      7.最后将第3步所得结果赋到第6步中的内存,即*p1=*p2;

简单理解: 先 *p1 = *p2;  后 p1 + 1,p2 + 1

: 

1、左值和右值

左值表位置,其意思是这个量标示了一个特定的位置。可作左值的有变量、下标引用、解引用指针(已初始化的指针)。    

右值表一个值,要求指定一个值。

2、前缀后缀问题 
    ++a  等价于   a =a+1;  return a;
    a++  等价于   int temp;  temp = a;  a= a+1;  return temp;  (temp是个临时变量)

 

附:运算符优先级表

 

  • 17
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值