首页 > 解决方案 > 结构内部结构和类型转换

问题描述

今天我发现这段代码看起来像一个拉长的片段,没有任何必要:

#include <stdio.h>

typedef struct
{
     //BLABLABLA
}
structA;

typedef struct
{
    //BLAAAAAAAAAAAAAAA
}
structB;

typedef struct
{
    structA A_obj;
    structB B_obj;
}
structC;


int main(void)
{
    structA *A_ptr;
    structC  C_obj;

    A_ptr = (structA *)(& (C_obj.A_obj)); //THIS LOOKS OVER-ENGINEERED
    return 0;
}

我无法理解为什么这样做而不是直接使用' 的大小或使用' 指向的对象来malloc()分配空间?structAstructAA_ptr

标签: c

解决方案


malloc()使用和不使用之间有很大的区别。例如A_ptrif 从函数返回将在函数已经完成执行的范围内无效,这意味着A_ptr现在指向“无效”内存。

你也不能free()那个指针。如上所述,它只能在分配实际对象的函数退出之前的任何地方使用。

这样做是为了在函数内部有一个指向局部变量的指针,如果没有看到实际用例,很难说动机是什么。

另请注意, type 的成员structA不是指针,因此您不能为其分配指针。您可以像在A_ptr = ....


推荐阅读