具有空大小的数组如何在 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]
。
我正在阅读一些关于 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]
。