具有空大小的数组如何在 C++ 中工作?

How arrays with an empty size works in c++?

我正在阅读一些关于 C++ 的材料,我刚刚看到可以在没有大小的情况下声明数组(例如 int arr[]、char x[][10]),我想知道 how/when 居然用了。有人可以解释这两个例子吗?

一个更明确的例子:

void foo(char[][10]);

这是否意味着像 a[n][10]、a[m][10] 这样的任何数组都可以传递给上述函数?

Does that mean that any array like a[n][10], a[m][10] can be passed to the above function?

是的。只要您传递一个兼容的参数,就允许函数签名 void foo(char[][10]);,即 ,即 一个具有 2 个维度的 char 数组,其中第二个维度的大小为 10.

事实上,从技术上讲,参数将衰减为一个指针,因此它与具有 void foo(char (*)[10]); 相同,一个指向十个数组的指针,在本例中为字符。 char[] 类型的参数也会衰减,这次是指向 char (char*).

的指针

此外,只要初始化数组,声明中就允许省略数组的第一维。编译器会根据初始化内容推导出数组的第一维,:

int arr[]{1,2};

尺寸为 2 (arr[2]),而

int arr[][2]{{1,2},{2,4}};

将根据聚合初始化变为arr[2][2]