指针类型不兼容

前端之家收集整理的这篇文章主要介绍了指针类型不兼容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我具有以下签名的功能
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 [] []不是一个真正的类型;只有一个尺寸可以是未指定的.但这里的核心问题是二维数组和双指针是否相同.

猜你在找的C&C++相关文章