我有以下 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*)
也不起作用。
指针不是数组。指针可以指向数组的元素。
float ****
是一个指向 float
的指针的指针,这是一个在现实生活项目中不太可能遇到的对象。
mat
是一个指向 bone_mat
的指针,它本身是一个数组或 128 个数组,每个数组由 3 个数组组成,每个数组有 4 个浮点数,是一种非常不同类型的野兽。
如果您将源代码发布到
get_bones()
,如果它返回实际的float ****
,我会感到惊讶,我敢打赌它会为bone_mat
分配内存,并将对象指针转换为与分配大小不一致的类型,并且块使用。