【问题标题】:What does the [x,y] symbol mean in a multidimensional array access? [duplicate][x,y] 符号在多维数组访问中是什么意思? [复制]
【发布时间】:2019-05-11 22:13:02
【问题描述】:

我正在学习 C,我遇到了下面的代码。所有printf 调用的打印结果始终相同。

[x,y] 是什么意思? 内存地址还是别的什么?

printf("%d ", array[0,0]);
printf("%d ", array[1,0]);
printf("%d ", array[2,0]);

【问题讨论】:

  • 两个字:逗号。很多词:下标表达式包含一个逗号运算符,它计算 LHS(0 或 1 或 2)并丢弃它,然后计算 RHS(总是 0)并用作数组的下标,所以你总是得到相同的打印值 — array[0]。如果array 实际上是某种二维数组,那么array[0] 将是一个地址,而不是一个简单的整数值。一个好的编译器每行会产生几个警告——找到将你的编译器转换成一个好的编译器的选项,或者得到一个好的编译器。
  • 逗号运算符丢弃左边的结果。 array[0,0]array[0] 相同。
  • 三个字:不要那样做。
  • 我想如果你按照你应该的方式使用它们,你的编译器会给你警告。对于gcc,我使用-Wall -Wextra -pedantic,尽管可能会有更好的选择。

标签: c arrays multidimensional-array


【解决方案1】:

中的comma operator 返回第二个参数。所以0,01,02,0 都评估为0,所以难怪所有printf 语句都打印相同的结果。如果要通过索引引用二维数组中的元素,则需要使用两组方括号。例如,array[1][0]

【讨论】:

  • 此外,如果要求警告,大多数编译器都会警告丢弃的表达式。
【解决方案2】:

这是一个“逗号运算符”。在 C 中,逗号运算符计算每个参数,但返回 最右边的参数。所以array[0,1]array[1] 相同,array[0,1,2]array[2] 相同。在你的情况下array[0,0])array[1,0]array[2,0] 都评估array[0]。所以所有语句都打印相同的结果。

另外来自@chqrlie 的评论),虽然它返回最右边的参数,但所有的表达式都会被计算,所以任何副作用都会被执行: printf("%d ", array[exit(1),0]); 不会打印任何东西。

【讨论】:

  • 您可以添加一条关于所有表达式的注释,以便执行任何副作用:printf("%d ", array[exit(1),0]); 不会打印任何内容:)
  • 这是很重要的一点@chqrlie。感谢您添加这一点。
猜你喜欢
  • 2016-07-18
  • 2014-11-06
  • 2019-12-23
  • 2012-01-09
  • 2014-07-28
  • 2015-02-13
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
相关资源
最近更新 更多