逗号运算符问题

考虑下面的C程序。

null

// PROGRAM 1
#include<stdio.h>
int main( void )
{
int a = 1, 2, 3;
printf ( "%d" , a);
return 0;
}


上面的程序编译失败,但下面的程序编译得很好,并打印1。

// PROGRAM 2
#include<stdio.h>
int main( void )
{
int a;
a = 1, 2, 3;
printf ( "%d" , a);
return 0;
}


下面的程序打印3,为什么?

// PROGRAM 3
#include<stdio.h>
int main( void )
{
int a;
a = (1, 2, 3);
printf ( "%d" , a);
return 0;
}


在C/C++程序中,逗号用于两种上下文:(1)分隔符(2)运算符。(见 更多细节)。

逗号在程序1中用作分隔符,我们在该程序中遇到编译错误。

逗号在程序2中用作运算符。 逗号运算符的优先级在运算符优先级表中最小 。因此赋值运算符优先于逗号,表达式“a=1,2,3”将等价于(a=1,2,3)。这就是为什么我们在第二个程序中得到1的输出。

在程序3中,使用括号,因此首先执行逗号运算符,我们得到的输出为3(参见 维基页面 更多细节)。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享