指针类型不兼容
发布时间:2020-12-16 03:35:35 所属栏目:百科 来源:网络整理
导读:我具有以下签名的功能: void box_sort(int**,int,int) 和以下类型的变量: int boxes[MAX_BOXES][MAX_DIMENSIONALITY+1] 当我打电话的功能 box_sort(boxes,a,b) 海湾合作委员会给我两个警告: 103.c:79: warning: passing argument 1 of ‘box_sort’ from
我具有以下签名的功能:
void box_sort(int**,int,int) 和以下类型的变量: int boxes[MAX_BOXES][MAX_DIMENSIONALITY+1] 当我打电话的功能 box_sort(boxes,a,b) 海湾合作委员会给我两个警告: 103.c:79: warning: passing argument 1 of ‘box_sort’ from incompatible pointer type (string where i am calling the function) 103.c:42: note: expected ‘int **’ but argument is of type ‘int (*)[11] (string where the function is defined) 问题是为什么? int x [] []和int ** x(和实际的int * x [])在C中不是相同的类型吗? 解决方法
我知道几天前几乎完全像这样的问题,现在找不到它.
答案是,int [size] [](参见底部的注释)和int **绝对不是相同的类型.在许多情况下,可以互换使用int []和int *,特别是在这种情况下,因为当将数组传递给函数时,数组会衰减到指向第一个元素的指针.但是对于二维阵列,这些方法是非常不同的存储方法. 这是它们在2×2阵列的内存中的外观: int a[2][2]: __a[0][0]__|__a[0][1]__|__a[1][0]__|__a[1][1]__ (int) (int) (int) (int) int **a (e.g. dynamically allocated with nested mallocs) __a__ (int**) | v __a[0]__|__a[1]__ (int*) (int*) | | | | v ------------------> __a[0][0]__|__a[0][1]__ __a[1][0]__|__a[1][1]__ (int) (int) (int) (int) 你可以这样构建第二个: int **a = malloc(2 * sizeof(int*)); a[0] = malloc(2 * sizeof(int)); a[1] = malloc(2 * sizeof(int)); 注意:正如其他人所说,int [] []不是一个真正的类型;只有一个尺寸可以是未指定的.但这里的核心问题是二维数组和双指针是否相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |