【问题标题】:Does C support multiple assignment of the type a , b = 0, 1 like python does?C 是否像 python 一样支持 a , b = 0, 1 类型的多重赋值?
【发布时间】:2018-09-04 14:58:38
【问题描述】:
""" Sample python code representing multiple assignment """
a , b = 0 , 1
print a , b

以下代码给出输出: 0 1 并且显然不会引发任何错误。 C 也支持吗?

【问题讨论】:

  • 没有。最接近的是this
  • 通常当一种语言不支持感兴趣的特性时,这意味着该语言有其他方法可以解决更高级别的问题。什么需要做多个作业?
  • @chux 我需要在我的 for 循环体内交换 3 个变量的值
  • 你可以做这样的事情:void AssignValues(int values[], ... ); 这会让你像这样实现第一行:int vals[]={0,1};AssignValues(vals, a, b); 但实现它会......讨厌。

标签: c variable-assignment multiple-assignment


【解决方案1】:

不,C 不支持多重赋值,也不支持元组的语言级别。

a, b = 0, 1;

以上是,考虑到operator precedence,相当于:

a, (b = 0), 1;

相当于:

b = 0;

live on coliru


与您的 Python 代码最接近的 C 等效项是:

a = 0, b = 1;

在这种情况下,使用赋值表达式的值是没有用的。

【讨论】:

    【解决方案2】:

    C 不像 Python 那样支持列表赋值。您需要分别分配给每个变量:

    a = 0; b = 1;
    

    【讨论】:

      【解决方案3】:

      没有 C 不支持这样的多重赋值。

      编译通过,因为a , b = 0 , 1 被分组为a, (b = 0), 1a1 是无操作但仍然有效的表达式;表达式等价于

      b = 0
      

      a 未更改。

      有趣的是,您可以在 C++ 中实现您想要的符号,只需一些设计和语法上的微小变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-11
        • 2011-04-28
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多