c-伪泛型嵌套数组的内存分配


(*((_SINGARR) _receptive->__m2dimensio + g_curr++)) = (_SINGARR) malloc(sizeof(*((_SINGARR)(_generic)) * g));

上述操作会产生以下编译器警告"赋值从没有强制转换的指针生成整数";

我想它是由sizeof运算符对类型化的取消引用的void*的评估以某种方式获得的,还是我只是没有相应地取消引用?

_genericvoid*方法参数

_receptive-typedef struct*方法参数用于访问其2D阵列属性(也是伪通用(

扩展指令

_SINGARR char*

当你展开所有的东西时,它看起来像

* (char*) p = (char*) malloc(...);

这意味着,右侧有一个指针(char*),左侧有一个字符(*(char*),整数类型(。

现在,警告信息变得更加清晰:

赋值从指针(赋值右侧的部分(生成整数(赋值左侧的部分(,而不使用强制转换


不相关,但扩展sizeof(...)部分将变为sizeof(*((char*)(_generic)) * g),这反过来又是sizeof(<some character value> * g),这反过来会变成sizeof(<some integer value>),这是sizeof(int),最后会变为4或8字节,具体取决于您机器的体系结构。

最新更新