骨灰级大神速来~~

Guitarf 2017-03-24 10:12:37

#include<stdio.h>
int main(){
int a,b,c;
// a=(b=c)+1; 该输出结果是 -858993459
// (a=b)=c=1; 该输出结果是 1
printf("%d",a=(b=c)+1);
return 0;

}

我看题目说 上面的第一种(第4行)是对的,第二种(第5行)会语法报错,因为该行左边是个赋值表达式,,结果VC编译器都通过了,我觉得题目答案有问题吧,,第二种 按优先级是先计算括号里的赋值表达式,它的值用 a 来保存 ,不是相当于 a=c=1;
第一种没弄明白!!还请大大门出来解答解答哈…^_^
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzw2016 2017-03-26
  • 打赏
  • 举报
回复
第二种是错的,左值不能是表达式。 a=(b=c)+1先算b=c,再加一,再赋值给a。而你并未对b或c赋值,计算机自动给了个随机数。
paschen 2017-03-25
  • 打赏
  • 举报
回复
第一种由于c没初始化,导致最后输出的是个很奇怪的值
paschen 2017-03-25
  • 打赏
  • 举报
回复
第一种执行顺序相当于: b = c; a = b + 1; 第二种执行顺序相当于: a = b; c = 1; a = 1;
heronism 2017-03-25
  • 打赏
  • 举报
回复
楼上说法正确,表达式应该不能被赋值
Chin__Lee 2017-03-24
  • 打赏
  • 举报
回复
a=b最后的返回值是一个右值,右值是不能被赋值的。 也就是说假如b=1那么(a=b)表达式作用是将b的值赋给a,此时a的值也是1,但是赋值表达式返回的结果是1,不是a。 自然1=c=1;很荒谬吧

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧