数组的第二个维度不明确。这个数组的大小是48,其中int
是2个字节,但是int a[6][4]
和int a[6][(2,2)]
之间的确切区别是什么?`int a [6] [(2,2)]`array是什么意思?
回答
int a[6][4]
和inta[6][(2,2)]
的确切区别是什么?
有一个很大的区别。 int a[6][(2,2)]
很大程度上相当于int a[6][2]
。表达式(2,2)
涉及comma operator并且评估为2
。
的微妙的差异(见从@Virgile评论)是(2,2)
不是C.常量表达式所以int a[6][(2,2)]
确实是一个大小6阵列大小2个可变长度数组的。因此从技术上讲,它确实是相当于
int n = 2;
int a[6][n];
实际上,'int a [6] [(2,2)]'不是_exactly_与int a [6] [2]'相同:“(2,2)'不是一个整型常量表达式标准第6.6节的意义)。这意味着前者在技术上是一个不能随处使用的可变长度数组。例如'gcc'会拒绝这样的声明作为全局变量。 – Virgile 2015-04-01 08:21:57
@Virgile这很有趣。它似乎是C++中的一个常量表达式。我澄清了这一点。 – juanchopanza 2015-04-01 09:12:45
int a[6][(2,2)] = int a[6][2];
逗号(,
)经营者有一个至少percedence所以你得到一个数组如上。
你可以测试一下自己
int main(void) {
int a[6][4];
int b[6][(2,2)];
printf("%d\n",sizeof(int));
printf("%d %d\n",sizeof(a),sizeof(b));
return 0;
}
int x = (3,4);
所以你能指望的x
价值是什么?
它的计算结果为x=4
同样适用于您的数组。
在你的代码
int a[6][(2,2)]
基本上是
int a[6][2];
说明:
按照该标准C11
,章§6.5.17
,逗号运算,
逗号运算符的左操作数被评估为void表达式;它的评估与右操作数的评估之间有一个顺序点。然后评估右操作数;结果有它的类型和价值。
int a[6][(2 , 2)];
^^
| |
[A] |
[B]
假设,A
和B
是,
操作的两个操作数。然后,顺序地
A
被评估以2
(作为void expression;
)。结果被丢弃。B
评估为2
。由于,
运算符具有右侧操作数的类型和值,因此最终结果为2
。
所以基本上,int a[6][(2,2)];
成为int a[6][2];
- 1. int A [] = {}是什么意思?
- 2. 这是什么意思? (int&)a
- 3. * array []是什么意思?
- 4. “a = a || []”是什么意思?
- 5. SendKeys“%{A}”是什么意思?
- 6. int values []是什么意思?
- 7. * int是什么意思?
- 8. 什么是(int - > int) - >(int - > int)是什么意思?
- 9. (void)sizeof(0 [array])是什么意思?
- 10. 什么是string array [] =“”;是什么意思?为什么它有效?
- 11. ($ a,$ b,$ c)= @array在Perl中是什么意思?
- 12. int(* ret)()=(int(*)())代码是什么意思?
- 13. int test [] = new int [0]是什么意思?
- 14. 是什么(INT - > INT)是什么意思?
- 15. 这些Array console.logs是什么意思?
- 16. “$ this-> array []()”是什么意思?
- 17. 在Ruby中,array * string是什么意思?
- 18. [array/object]中的[literal]是什么意思?
- 19. PHP:`array(&$ this)`是什么意思?
- 20. 表达式“+ + a”是什么意思?
- 21. s_i = s [i] - 'a'是什么意思?
- 22. println(f(a))是什么意思?
- 23. 2 [p]和6 [p]是什么意思?
- 24. 什么是ocaml类型'a。 'a - >'是什么意思?
- 25. 操作c = a +++ b是什么意思?
- 26. 是什么意思:是什么意思?
- 27. int x; arr [100]是什么意思?
- 28. 这是什么意思*(int *)&x当typecasting?
- 29. “static int function(...)__acquires(..)__releases(...){”是什么意思?
- 30. 什么是A <int(int)>是什么意思?这个技术的名字是什么?
的毫无意义的,混淆代码只是另一种情况。我不知道为什么人们如此着迷于这样的胡说,并疯狂地提出有关它的任何话题...... [在C中逗号操作符做什么?](http://stackoverflow.com/questions/52550/what-做最逗号操作-DO在-C)。 – Lundin 2015-04-01 07:01:07