【问题标题】:What is the result of an assignment expression in C? [duplicate]C中赋值表达式的结果是什么? [复制]
【发布时间】:2013-05-10 04:14:40
【问题描述】:

在以下代码中:

int c;
while((c=10)>0)

c = 10 的评估结果是什么?是 1 表示将值 10 分配给变量 c 成功,还是 10?为什么?

【问题讨论】:

    标签: c expression assignment-operator


    【解决方案1】:

    c = 10 是一个返回 10 的表达式,它也将 10 分配给 c。

    【讨论】:

    • 如果将 10 分配给 c,但 c = 10 是否应该返回 1?
    • 这样不好,想想 a = c = 10;你不希望 a 是 10,而不是 1?
    • @user2131316: 表达式 c = 10 在赋值后具有c 的值(N1570, 6.5.15/3)。赋值表达式不是布尔表达式。
    • 它不返回 10,它返回 c,第一次调用时为 10。不同之处在于c 的值很可能会在while 块中发生变化。
    【解决方案2】:

    据说在C99 6.5.16

    An assignment operator stores a value in the object designated by the left operand. An        
    assignment expression has the value of the left operand after the assignment, but is not an 
    lvalue.
    

    【讨论】:

    • 最佳答案 - 清晰、准确、简短
    • 跟进@martinkunev的回答:这个回答也更好,因为它直接引用了标准,更直接地谈到了表达式值的类型的问题,它与左边的类型匹配-手操作数。 (考虑 a=b=c 其中 acunsigned intb无符号短。)
    • 这也意味着int x = 10; int y = (x += 1); 的结果是x = 11, y = 11不是 x = 11, y = 1
    【解决方案3】:

    赋值返回赋值。如果c=10 是 10。由于 10!=0,在 c 中它也意味着 true,所以这是一个无限循环。

    这就像你会写

    while(10)
    

    另外你已经完成了任务。

    如果你按照这个逻辑,你可以看到,那

    while(c=0)
    

    将是一个从不执行其语句或块的循环。

    【讨论】:

      【解决方案4】:
      while((c=10)>0)
      

      c = 10should 返回10

      现在,对于 while(10>0) 10>0> 运算符返回 1(非零值)。

      【讨论】:

        【解决方案5】:

        这是一个无限循环。它首先将 10 分配给 c,然后将其与 c > 0 进行比较,然后再次开始循环,将 10 分配给 c,将其与 c>0 进行比较,依此类推。循环永远不会结束。这等效于以下内容:

        while(c=10);
        
        /* Because c assign a garbage value, but not true for all cases maybe it assign 0 */
        while(c); 
        

        编辑:它不会返回 10,因为编译器只返回 true 或 false 值,所以它返回 true 或 1 而不是 10。

        【讨论】:

        • 为什么c会被赋值为垃圾值?
        • 因为它还没有初始化,编译器会自动为其分配一些值。因为内存中的所有地址在初始化之前都有一些值
        • c = 10 会不会将值10 分配给c
        • 它在第一个语句而不是第二个语句中将 10 分配给 c
        • 哦,我以为是一个块
        猜你喜欢
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 2019-07-31
        • 1970-01-01
        相关资源
        最近更新 更多