有错没有:*p++=*q++

来源:百度知道 编辑:UC知道 时间:2024/06/06 12:40:17
在C中,p和q指针分别指向两个数组第一位。
这里的运算顺序是什么?是赋值后指针分别后移一位还是指针所指内容自增+1?
++在后面不是应该先赋值才移动?

这个试子是两边的指针各自移动一位,然后再赋值,算术运算符的优先级高于赋值运算符。
我上面的回答是错,应该是先赋值,然后再各自移动。
下面的代码可以验证:
#include "stdio.h"
main()
{
int a[5]={1,2,3,4,5};
int b[5]={5,4,3,2,1};
int *p,*q;
int i=0,j=0;
p=a;
q=b;
for(j=0;j<5;j++)
{
printf("%d\n",*q++);
} /*输出数组a */

for(i=0;i<5;i++)
{
*p++=*q++;
}
for(j=0;j<5;j++)
{
printf("%d\n",*p++);
} /*输出赋值后的数组a */
}

没错,相当于p,q分别指向下一位,并且把q指向的值赋值给p指向的值
char *mystrcpy(char *dst,char *src)
{
while ((*dst++=*src++)!='\0')
return dst;
}
简单的表达一下,就是字符复制
先是指针移动再*取值,再赋值 (++的运算优先级>*)

你们都喜欢写的这么让人蛋疼么?