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,前缀++和*优先级相同,根据操作符结合性从右向左执行,先*后++。

 

*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是个临时变量)

 

附:运算符优先级表

 

发布了21 篇原创文章 · 获赞 16 · 访问量 8355

猜你喜欢

转载自blog.csdn.net/rentan0930/article/details/91414601