加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

指针类型不兼容

发布时间: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 [] []不是一个真正的类型;只有一个尺寸可以是未指定的.但这里的核心问题是二维数组和双指针是否相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读