c语言基本运算符问题 *a++ = *b++

voidmain(){intres[2]={5,9},asd[2]={2,6};int*a,*b;a=res;b=asd;*a++=*b++;printf("%d,%d\... void main(){
int res[2]={5,9},asd[2]={2,6};
int *a,*b;
a=res;
b=asd;
*a++=*b++;
printf("%d,%d\n",*a,*b);
}
++的优先级高于*,则 *(a++)=*(b++),预测结果为6,6 可是运行结果为9,6 为什么?
怎么理解 *a++=*b++
展开
 我来答
走马看飞腾0954
2013-12-09 · TA获得超过445个赞
知道小有建树答主
回答量:319
采纳率:100%
帮助的人:257万
展开全部


*a++=*b++;这里,++与* 号的优先级都比等号高,等他们都执行完,9=6,是这个东西,这是什么意思?      

                       注意:++与*是同一级运算符,结合方向有运算方向决定,不是你讲的++优先*号,


呵呵,想来是这里的问题。你看图片,比较哈就知道了。

    高手指教,相互学习。

汽水laugh
推荐于2017-09-19 · TA获得超过291个赞
知道小有建树答主
回答量:215
采纳率:33%
帮助的人:86.2万
展开全部
因为这是后置运算。如果你不弄明白前置元算与后置运算的区别,这类问题都容易出错。
前置运算:
举例:
++a=++b;

执行顺序是:

a=a+1;

b=b+1;

a=b;

后置运算:
举例:
a++=b++;

a=b;

a=a+1;

b=b+1;

再回到你上面的问题:
*a++=*b++;
执行顺序是:
*a;
*b;
*a=*b;
a++;
b++;
最后输出的就是a[1],b[1],明白了没有?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
人帅自有天帮V7
2013-12-09 · 超过21用户采纳过TA的回答
知道答主
回答量:46
采纳率:100%
帮助的人:26.6万
展开全部
*a++ = *b++,从中可以看出,首先把*b所指向的值赋值给*a,就是asd[2]中的2把res[2]中的5给覆盖了;其次就是*a和*b再来执行"++"这个运算符,并指向下一个数组元素并且输出9,6。

* 和++的优先级是一样高的,但是它们的运算方向是从右到左!!!
*a++就是等于*(a++) 但此时要是输出*a++,会输出的值等于*a,然后再把指针变量会指向下一个数据

楼主所预测的结果为6,6是不对的,*a++=*b++ *b只会给*a赋值一次,就是把*b所指向的值赋值给*a所指向的值;然后通过“++”指针会指向下一个数组元素,但绝不会再给*a赋值;楼主所预测的结果为6,6,实际上楼主是指针指向下一个数组元素,并且给*a 的值覆盖了;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雨吻月
2013-12-09 · TA获得超过384个赞
知道小有建树答主
回答量:394
采纳率:0%
帮助的人:192万
展开全部
*a++=*b++的分解步骤
1 *a=*b; // res[2]={2,9};
2 b=b+1; //b指向6的地址
3 a=a+1; //a指向9的地址

所以 *a=9,*b=6

*号和++是单目运算符,优先级相同,但是结合方向是从右至左。就是把*号右面的看成一个整体,
也就是*(a++)=*(b++); 因为++在后,所以最后做增1,先做*(a)=*(b), 然后b++, a++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6fe74e2
2013-12-09 · TA获得超过6592个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:257万
展开全部
*a++=*b++;
的确是相当于
*(a++)=*(b++);
由于++在后
所以

又相当于
*a=*b;
a++;
b++;
所以
运行后
第一句
*a=*b;
则相当于
res[0]=asd[0]=2,那么此时res数组就成了int res[2]={2,9};
a++ ----------a指向res[1]
b++ ----------b指向asd[1]
所以
*a=res[1]=9
*b=asd[1]=6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式