如何定义int [] [26]类型的变量?

时间:2019-11-08 17:21:33

标签: c++

一个函数接受int [] [26]类型的值,但是,我无法定义此类型的变量。

void A(int abc[][26]);

我尝试了以下

int abc[][26] (can't compile)
int (*abc)[26] (segmentation fault)

如何定义这样的变量/

非常感谢

2 个答案:

答案 0 :(得分:1)

  

如何定义int [] [26]类型的变量?

int[][26]是一个未知范围的数组。您不能定义此类变量。

未知范围的数组通常可以在将类型调整为的其他情况下使用。例如,在函数参数列表中,将数组调整为指向该数组元素的指针。由于类型调整,以下内容是等效的:

void A(int abc[][26]);
void A(int (*abc)[26]);
// adjusted argument type is int(*)[26]

此类调整的另一个示例是变量的定义,其中从初始化程序推导范围。由于类型调整,以下内容是等效的:

int arr[][26]  = {{}, {}};
int arr[2][26] = {};
// adjusted array type is int[2][26]

在模板中未调整类型的未知范围的数组的用例在模板中,其中显式提供此类数组作为模板类型参数可用于表示指针指向数组中的元素,而不是单数宾语。例如,std::allocator<int>::deallocate将调用delete,而std::allocator<int[]>::deallocate将调用delete[]

答案 1 :(得分:1)

基本上您不会。 int abc[][26]将采用int[N][26]形式的任何2d数组。

将数组用作函数参数时,将使用数组decays to a pointer。这意味着不需要最上面的维,因为它会衰减到数组中元素类型的指针。所以,如果你有

void foo(int[10])

你真正拥有的是

void foo(int*)

因为有多少个元素都没有关系。当你有

void foo(int[10][26]) 
//or
void foo(int[][26]) 

那么你就得到

void foo(int(*)[26])

由于数组包含数组,因此我们获得了指向数组的指针,因为指针指向的数组数量无关紧要,我们只需要知道它指向int[26]即可。