我这代码这么编译不了
#include<stdio.h>void main()
{
int a = 1, b = 5, c = 8;
int y = (a+b), (b+c);
printf("%d\n", y);
}
可当我把上面的代码改成下面的就可以,为啥下面的行,它们有什么区别吗?
#include<stdio.h>
void main()
{
int a = 1, b = 5, c = 8, y;
y = (a+b), (b+c);
printf("%d\n", y);
}
还有就是逗号运算符是以表达式2的值当做整个表达式的值,可为啥我这题却是以表达式1的值当整个表达式的值呢?
这是以表达式1的结果当整个表达式的结果了
本帖最后由 一点点儿 于 2022-8-9 18:35 编辑
优先级:赋值运算符>逗号运算符
下面的代码和上面代码的区别是先声明y再运算
y = (a+b), (b+c)
因为优先级:赋值运算符>逗号运算符
会先运行 y = (a+b)
y就为6了
y = (a+b), (b+c)相当于 (y = (a+b)), (b+c)
逗号表达式的值还是表达式2的值,只不过逗号表达式的值没有赋给y,y的值不是逗号表达式的值。实际上这里逗号表达式的值没有赋给任何一个变量,我们看不到是多少
如果用z得到逗号表达式的值,再打印y和z,如下面代码所示
#include <stdio.h>
int main() {
int a = 1, b = 5, c = 8, y, z;
z = ( y = (a + b), (b + c));
printf("%d %d\n", y, z);
}
运行结果为: 6 13
可以发现逗号表达式的值还是表达式2的值
一点点儿 发表于 2022-8-9 18:23
优先级:赋值运算符>逗号运算符
下面的代码和上面代码的区别是先声明y再运算
那最上面的为啥编译不了,是语法错误吗 课件里说表达式2的值是y的值,我编译运行了,发现表达式1才是对的{:10_247:}怪不得出新课件,这老课件有错误的地方{:10_266:} 竹逸 发表于 2022-8-9 19:02
那最上面的为啥编译不了,是语法错误吗
应该是
应该先声明变量再进行运算 一点点儿 发表于 2022-8-9 18:23
优先级:赋值运算符>逗号运算符
下面的代码和上面代码的区别是先声明y再运算
z = ( y = (a + b), (b + c));
这句其实是这个意思
如:z = (5, 8) 首先运行()中的内容,按顺序获得5,然后获得8,最后把 8赋值给 z; 最后 z = 8; 一点点儿 发表于 2022-8-9 19:30
应该是
应该先声明变量再进行运算
可为啥 int a=1 就行,这不也是声明和运算一起的么?是因为用常量赋值可以,而变量不行? 竹逸 发表于 2022-8-9 21:01
可为啥 int a=1 就行,这不也是声明和运算一起的么?是因为用常量赋值可以,而变量不行?
应该先声明再进行逗号运算 我知道为啥最上的代码错误了,因为变量声明重复了,int y=a+b,b+c这条语句是变量声明,逗号运算符在这里的作用是起到给多个变量间隔,而后面的b+c在上面已经声明了过了,重复声明报错
页:
[1]