Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中括号内两个值的赋值_C_Syntax - Fatal编程技术网

C中括号内两个值的赋值

C中括号内两个值的赋值,c,syntax,C,Syntax,C中的这段代码是做什么的: p = (1, 2.1); 关于p,我们知道些什么?C中的逗号运算符是一个序列点,这意味着由逗号分隔的表达式是从左到右执行的。整个表达式的值是最右边表达式的值,在您的例子中是2.1,它被分配给变量p 因为示例中的表达式没有副作用,所以这里使用逗号分隔符毫无意义 另一方面,括号很重要,因为赋值运算符(=)的绑定强度比逗号运算符强(它具有更高的优先级),并且会在没有括号的逗号运算符之前求值。结果将是p==1这是一个错误。逗号运算符类似于;。它先做一个,然后做另一个。所以

C中的这段代码是做什么的:

p = (1, 2.1);

关于
p
,我们知道些什么?

C中的逗号运算符是一个序列点,这意味着由逗号分隔的表达式是从左到右执行的。整个表达式的值是最右边表达式的值,在您的例子中是
2.1
,它被分配给变量
p

因为示例中的表达式没有副作用,所以这里使用逗号分隔符毫无意义


另一方面,括号很重要,因为赋值运算符(
=
)的绑定强度比逗号运算符强(它具有更高的优先级),并且会在没有括号的逗号运算符之前求值。结果将是
p==1

这是一个错误。逗号运算符类似于;。它先做一个,然后做另一个。所以(1,2.1)计算为2.1


p将是2.1(或2,如果p是int,需要截断…

所有逗号分隔的表达式将从左到右求值,并返回最右边表达式的值


< p > 2.1,

在编写C代码的二十年中,我还没有找到一个非常有用的非逗号用于逗号运算符。您可以在C++中重载运算符(但不是C,显然),Boost使用这些工具来实现列表初始化,例如<代码> ListyType MyList=1, 2, 3,4, 5 < /COD>。我打赌你有时会发现(i=0;i为了有用Graeme,如果有很多黑客的话,你为什么想要非黑客的使用呢?逗号操作符基本上是一个黑客的操作符-它是在只有一个允许的情况下黑客攻击两件事。“我们对p了解多少?”听起来像是一个家庭作业问题我知道这是你的第一个问题,这是一个好问题,但这里的大多数人似乎更喜欢问题中没有问候语。不过这没什么大不了的。此外,该站点还具有一些格式化功能,您可以使用这些功能使代码看起来更漂亮。我为你准备好了-我希望你不介意。格伦,对我来说,这听起来更像是一个深刻的哲学问题。只是因为添加“家庭作业”的措辞听起来很奇怪。这不一定是个错误,只是完全没有用。嗯。您多久会看到一次这种功能,而且这不是一个错误?是的,可能是这样,但可能性很小,不是吗?我看过一次:在这里,它被用作家庭作业,用来测试逗号运算符的知识。到目前为止,根据我所看到的所有案例,以这种方式使用逗号运算符在100%的情况下都不是一个错误。我所看到的99%的情况(在CS 1项目等中)是人们无法使用2D数组。。。啊[3,5]!=arr[3][5]。。。