繁体   English   中英

c中基本但棘手的语法

[英]A basic but tricky syntax in c

gcc编译器上的foll基本代码输出3。

但当我用{}替换()它输出4

     int i={3,2,4};printf("%d",i); 

有人可以解释这种行为吗? ,操作如下从左到右评估,但它的情况下,不{}

当您使用{3,2,4}时,您正在使用标量初始化,但是您提供的元素多于您应该使用的元素。 这将触发编译器的警告,但是它将编译和执行,并且标量初始化的第一个元素将归因于变量i。

当您使用(3,2,4)时,您基本上使用逗号运算符(因为您正在初始化变量,所以需要括号)。 逗号运算符计算第一个操作数并丢弃结果,然后计算第二个操作数并返回结果。 所以在这里你评估3,丢弃它,然后评估2,返回它(这个返回值用作第二个逗号的左操作数)并最终计算4,并返回它,所以4归因于变量i。

这是另一个有趣的操作:

int i;
i = 3,4;
printf("%d\n",i);

这将打印3,因为将评估第一个i = 3(因为这是逗号的左操作数),并且其结果将被丢弃。 然后将评估4并返回其结果,但不归因于该变量。

并使事情更有趣:

int i,j;
j = (i = 3,4);
printf("%d %d\n",i,j);

这将打印“3 4”。 换句话说,我上面描述的所有内容都会发生,但是当评估并返回4时,它现在将归于j。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM