无法在初始化中将‘float****’转换为‘float (*)[128][3][4]’[重复]

问题描述 投票:0回答:1

我有以下 2 个 typedef:

typedef float matrix_3x4[3][4];
typedef matrix_3x4 bone_mat[128];

以及以下函数定义:

float ****get_bones();

为什么下面的代码给我一个类型转换错误?

bone_mat *mat = get_bones();

错误:

error: cannot convert ‘float ****’ to ‘float (*)[128][3][4]’ in initialization
   85 |     bone_mat *mat = get_bones();
      |                     ~~~~~~~~~^~
      |                              |
      |                              float****

尝试将

mat
的类型更改为
bone_mat
bone_mat**
,但
float(*)[128][3][4]
不应该与
float****
相同吗?

将函数的返回值转换为

(bone_mat*)
也不起作用。

arrays c pointers matrix multidimensional-array
1个回答
2
投票

指针不是数组。指针可以指向数组的元素。

float ****
是一个指向
float
的指针的指针,这是一个在现实生活项目中不太可能遇到的对象。

mat
是一个指向
bone_mat
的指针,它本身是一个数组或 128 个数组,每个数组由 3 个数组组成,每个数组有 4 个浮点数,是一种非常不同类型的野兽。

如果您将源代码发布到

get_bones()
,如果它返回实际的
float ****
,我会感到惊讶,我敢打赌它会为
bone_mat
分配内存,并将对象指针转换为与分配大小不一致的类型,并且块使用。

© www.soinside.com 2019 - 2024. All rights reserved.