关于逗号运算符的问题
void main(void){
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf("y=%d,x=%d",y,x);
}
代码如上所示,运算结果,X Y 都是6
我知道赋值运算符的优先级要大于逗号,那不就应该是
1.先计算出X的值为6
2.把X的值赋值到y
3.把(b+c)赋值到y
所以不应该是X=6
y=10么
PS:在C99里面要求适应int main(c语言程序设计第四版里面说的,甲鱼老师的课件应该是第2版)
因为赋值运算符优先逗号运算符
如
int a=2, b=5;
int c;
c=a,b;
则c=2;
你说的那第2,3步骤是关于逗号表达式的
如
int a=2,b=5;
int c;
c=(a,b);
这时c=5;,因为()比赋值运算符优先,所以先运算()里面,这时的运算过程是先计算逗号表达式的表达式1(也就是a),再计算表达式2(也就是b),整个表达式的值等于最后一个表达式的值(也就是b),所以c=b.
下弦月之夜_夜末 发表于 2013-11-24 18:28 static/image/common/back.gif
因为赋值运算符优先逗号运算符
如
int a=2, b=5;
是的啊。所以我的那个程序不就应该是把(B+c)赋值到Y吗 admintow 发表于 2013-11-24 18:34 static/image/common/back.gif
是的啊。所以我的那个程序不就应该是把(B+c)赋值到Y吗
y=( (x=a+b),(b+c) );这样才行。 下弦月之夜_夜末 发表于 2013-11-24 18:37 static/image/common/back.gif
y=( (x=a+b),(b+c) );这样才行。
我知道了。。。。
就是括号的优先级排在第一,赋值号的优先级排在第二!!!!
thank admintow 发表于 2013-11-24 18:39 static/image/common/back.gif
我知道了。。。。
就是括号的优先级排在第一,赋值号的优先级排在第二!!!!
thank
不用客气{:1_1:} 楼主我爱你:lol: 楼上的亮了 学习了支持一个
逗号运算符是最后才运算的.! 你只要知道就行了.到时候学习汇编你的问题就迎刃而解了:loveliness: 骇客不会飞 发表于 2013-11-25 11:37 static/image/common/back.gif
楼主我爱你
我不爱你。。
太支持搂住了{:1_1:}:sad{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:} 我要积分! 不错不错,共同进步!
页:
[1]