当我们返回具有两个值的整数时,C中的逗号运算符会做什么?

Drag0nKn1ght

float当我键入时,我实际上是在返回一个,.但它没有给我任何错误。然后,我尝试运行以下代码。

#include<stdio.h>
#include<conio.h>
int getValue();
int main()
{
    int a = getValue();
    printf("%d", a);
    return 0;
}

int getValue()
{
    return 2, 3;
}

现在输出为3,即返回第二个值。这发生在两年前,此后一直在寻找正确的答案。

通过研究这个问题的答案,我知道它在评估后返回了第二个值,但是它对第一个有什么作用?

我研究了堆栈的逻辑(如何在内部推入和弹出值),但我认为这与它没有任何关系。

它是处理两个值还是做其他事情?

苏拉夫·戈什(Sourav Ghosh)

引用C11标准,第§6.5.17章,逗号运算符

逗号运算符的左操作数被评估为void表达式;在它的评估与正确操作数的评估之间存在一个顺序点。然后评估正确的操作数;结果具有其类型和价值。

现在,回答您的问题

它与第一个有什么关系?

可以说,第一个操作数(左手操作数)被求值,结果被丢弃

注意:我提到的是结果,而不是效果

只是要澄清一下,在您的情况下,您不会注意到效果,但是如果左手表达式和右手表达式都与同一个变量相关,则可以注意到它的效果。例如,让我们讨论一个简单的例子

return p=3, p+2;

我们可以将return语句分解为

  • ASIGN的值3给变量p [的左侧操作,]
  • 执行时p+2,ehich生成值5[ ,]的右侧运算符
  • return5作为第二个参数的值的值[在该子句之后:“(,运算符的)结果具有其(右操作数的评估)类型和值。”]

观看现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在两个列表中应用运算符的C#惯用方式是什么?

来自分类Dev

当我们在Lua中没有`|`运算符时,如何验证该字符串?

来自分类Dev

python中两个赋值运算符有什么区别?

来自分类Dev

当我们在两个结构上使用=运算符时会做什么?

来自分类Dev

有什么简单的方法可以在Ruby中链接两个比较<=>运算符?

来自分类Dev

在三个整数上两次使用=运算符时会做什么?

来自分类Dev

C ++:在类分配运算符函数中,为什么我们必须返回* this

来自分类Dev

我们可以写没有返回值的三元运算符吗

来自分类Dev

当我们有两个选择器时,Sling如何解析脚本?

来自分类Dev

当我们声明静态变量时,编译器实际上会做什么?

来自分类Dev

C ++运算符重载> =,具有2个不同的返回值

来自分类Dev

为什么我们不能在三元运算符中返回?

来自分类Dev

我们可以在C ++中重载`==`运算符来比较两个字符串吗?

来自分类Dev

当“ new”运算符使用构造函数初始化内存时,JVM会做什么?

来自分类Dev

Julia的反斜杠(\)运算符在两个矩阵上做什么?

来自分类Dev

重载括号运算符会做什么?

来自分类Dev

在Django中,| 当我将两个查询集合并在一起时,运算符正在创建重复项

来自分类Dev

当我们在while循环中给两个比较运算符时,python如何理解?

来自分类Dev

当我们在sencha ext js 7.2上有两个组件时,Datepicker不会正确选择先前的值

来自分类Dev

运算符“”在C ++中做什么?

来自分类Dev

在有条件的右侧使用时,运算符会做什么?

来自分类Dev

当我们可以通过&运算符传递变量的地址时,为什么要通过指针传递?

来自分类Dev

我们可以写没有返回值的三元运算符吗

来自分类Dev

逗号运算符在Bash算术中做什么?

来自分类Dev

作为C#中的运算符,+-会做什么

来自分类Dev

当我们使用new运算符在字符串常量池中精确创建对象时。

来自分类Dev

当我们在C ++中没有合适的左值时,应该以int&返回什么?

来自分类Dev

当我们使用“<”重定向时,shell 会做什么?

来自分类Dev

当我们有数字和字符串时,>> 运算符如何工作

Related 相关文章

  1. 1

    在两个列表中应用运算符的C#惯用方式是什么?

  2. 2

    当我们在Lua中没有`|`运算符时,如何验证该字符串?

  3. 3

    python中两个赋值运算符有什么区别?

  4. 4

    当我们在两个结构上使用=运算符时会做什么?

  5. 5

    有什么简单的方法可以在Ruby中链接两个比较<=>运算符?

  6. 6

    在三个整数上两次使用=运算符时会做什么?

  7. 7

    C ++:在类分配运算符函数中,为什么我们必须返回* this

  8. 8

    我们可以写没有返回值的三元运算符吗

  9. 9

    当我们有两个选择器时,Sling如何解析脚本?

  10. 10

    当我们声明静态变量时,编译器实际上会做什么?

  11. 11

    C ++运算符重载> =,具有2个不同的返回值

  12. 12

    为什么我们不能在三元运算符中返回?

  13. 13

    我们可以在C ++中重载`==`运算符来比较两个字符串吗?

  14. 14

    当“ new”运算符使用构造函数初始化内存时,JVM会做什么?

  15. 15

    Julia的反斜杠(\)运算符在两个矩阵上做什么?

  16. 16

    重载括号运算符会做什么?

  17. 17

    在Django中,| 当我将两个查询集合并在一起时,运算符正在创建重复项

  18. 18

    当我们在while循环中给两个比较运算符时,python如何理解?

  19. 19

    当我们在sencha ext js 7.2上有两个组件时,Datepicker不会正确选择先前的值

  20. 20

    运算符“”在C ++中做什么?

  21. 21

    在有条件的右侧使用时,运算符会做什么?

  22. 22

    当我们可以通过&运算符传递变量的地址时,为什么要通过指针传递?

  23. 23

    我们可以写没有返回值的三元运算符吗

  24. 24

    逗号运算符在Bash算术中做什么?

  25. 25

    作为C#中的运算符,+-会做什么

  26. 26

    当我们使用new运算符在字符串常量池中精确创建对象时。

  27. 27

    当我们在C ++中没有合适的左值时,应该以int&返回什么?

  28. 28

    当我们使用“<”重定向时,shell 会做什么?

  29. 29

    当我们有数字和字符串时,>> 运算符如何工作

热门标签

归档