【发布时间】:2020-09-29 01:45:28
【问题描述】:
我想执行类似以下代码的操作,但我不断收到有关间接级别的警告。
据我了解,在下文中,
int Array1[5];
int Array2[2][4];
int *pointer1 = Array1;
int *pointer2 = Array2;
所有 4 个示例的间接级别均为 (int*)。
但似乎无论我尝试编译代码的以下想法的哪种组合,我都会收到间接警告:
void loadIntArrayData(int size, int *buffer);
void passArrayIntoThisFunction(char count, int *structure){ //idea 1
void passArrayIntoThisFunction(char count, int **structure){ //idea 2
void passArrayIntoThisFunction(char count, int structure[][3]){ //idea 3
loadIntArrayData(3*count*sizeof(int), structure); //idea 1
loadIntArrayData(3*count*sizeof(int), &(structure[0][0])); //idea 2
loadIntArrayData(3*count*sizeof(int), &(structure[0])); //idea 3
loadIntArrayData(3*count*sizeof(int), structure[0]); //idea 4
}
int main(void){
passArrayIntoThisFunction(2, (int[][3]){{1,2,3},{4,5,6}});
//I want to have a multi-level array ^ here ^ for readability
return 0;
}
有人可以解释多维数组的间接级别吗?
这里是警告(根据使用的组合会有所不同):
'function': 'int *' differs in levels of indirection from 'int[2][3]'
【问题讨论】:
-
指针类型不匹配。在消除所有代码之前,甚至不要尝试运行代码。对
pointer2的分配应该会产生一个不兼容的指针警告,因为您正试图将int (*)[4]分配给int *。如果要正确声明pointer2,则声明为int (*pointer2)[4];,然后可以通过pointer2正确访问Array2。
标签: c arrays multidimensional-array implicit-conversion