【发布时间】:2021-10-12 01:48:08
【问题描述】:
为什么我们需要列大小
int arr[][] = { {1,2,3},{1,3,5} };//int arr[][3]
在这个特定的示例中,为什么编译器不能从数据中推断出它必须将每个元素仅包含 3 个元素打包到每一行中?为什么编译器这样做有限制?
如果是的话我可以理解
int arr[][] = { 1,2,3,1,3,5 };
那么编译器没有关于每行需要打包多少数据的信息。
我读了一个类似的问题Why do we need to specify the column size when passing a 2D array as a parameter?。但它不包含答案。
编辑:为避免混淆,我说的是上述数据的确切格式。
【问题讨论】:
-
C 和 C++ 有一些共同点,但它们是两种不同的语言,在细节方面具有不同的规则。请选择一个。
-
最后,有人决定了编译器必须能够做什么,不能做什么。您可能会认为,通常会留下一些东西:实际上,编译器也可以发现这一点 - 并且至少仅在某些条件下...... - 如果其他(链接的)Q/A 不足以说服你,我不确定要添加什么。
-
我不确定这方面是否有区别。但是一旦有人引用标准,它要么是一个,要么是另一个,除非他们做了额外的检查工作
-
@PaulSanders OP 小心地使用了一个初始化器,其中所有“子初始化器”都具有相同的长度。他表示编译器可以在这种特殊情况下做到这一点...... :-)
-
@PaulSanders:现在可能有很多可能性。但是如果标准可以说它必须是这样的,那么应该没有任何问题。