admintow 发表于 2013-11-24 17:35:15

关于逗号运算符的问题

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版)

下弦月之夜_夜末 发表于 2013-11-24 18:28:22

因为赋值运算符优先逗号运算符

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.

admintow 发表于 2013-11-24 18:34:23

下弦月之夜_夜末 发表于 2013-11-24 18:28 static/image/common/back.gif
因为赋值运算符优先逗号运算符

int a=2, b=5;


是的啊。所以我的那个程序不就应该是把(B+c)赋值到Y吗

下弦月之夜_夜末 发表于 2013-11-24 18:37:20

admintow 发表于 2013-11-24 18:34 static/image/common/back.gif
是的啊。所以我的那个程序不就应该是把(B+c)赋值到Y吗

y=( (x=a+b),(b+c) );这样才行。

admintow 发表于 2013-11-24 18:39:57

下弦月之夜_夜末 发表于 2013-11-24 18:37 static/image/common/back.gif
y=( (x=a+b),(b+c) );这样才行。

我知道了。。。。
就是括号的优先级排在第一,赋值号的优先级排在第二!!!!
thank

下弦月之夜_夜末 发表于 2013-11-24 19:10:07

admintow 发表于 2013-11-24 18:39 static/image/common/back.gif
我知道了。。。。
就是括号的优先级排在第一,赋值号的优先级排在第二!!!!
thank

不用客气{:1_1:}

骇客不会飞 发表于 2013-11-25 11:37:38

楼主我爱你:lol:

dodolovely 发表于 2013-11-25 16:56:42

楼上的亮了      

蝴蝶效应 发表于 2013-11-25 18:18:46

学习了支持一个

ヽ朝暮是安然 发表于 2013-11-25 18:38:43

逗号运算符是最后才运算的.!   你只要知道就行了.到时候学习汇编你的问题就迎刃而解了:loveliness:

admintow 发表于 2013-11-25 19:28:30

骇客不会飞 发表于 2013-11-25 11:37 static/image/common/back.gif
楼主我爱你

我不爱你。。

wangwei111 发表于 2013-11-25 20:25:05

太支持搂住了{:1_1:}:sad{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}{:1_1:}

卧室不要床 发表于 2013-11-25 21:04:01

我要积分!

qlw319 发表于 2013-11-26 08:14:37

不错不错,共同进步!
页: [1]
查看完整版本: 关于逗号运算符的问题