c - 结构内部结构和类型转换
问题描述
今天我发现这段代码看起来像一个拉长的片段,没有任何必要:
#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()
分配空间?structA
structA
A_ptr
解决方案
malloc()
使用和不使用之间有很大的区别。例如A_ptr
if 从函数返回将在函数已经完成执行的范围内无效,这意味着A_ptr
现在指向“无效”内存。
你也不能free()
那个指针。如上所述,它只能在分配实际对象的函数退出之前的任何地方使用。
这样做是为了在函数内部有一个指向局部变量的指针,如果没有看到实际用例,很难说动机是什么。
另请注意, type 的成员structA
不是指针,因此您不能为其分配指针。您可以像在A_ptr = ...
.
推荐阅读
- python - Python:使用 BeautifulSoup 获取 href 的 URL 时遇到问题
- sql - 复制同一表的多行但具有不同的 id 并将复制行的旧 id 存储在列名 old ids 中
- hibernate - JPQL 急切地获取元素
- azure - 在 Arm 模板中使用 If/Else
- ruby - 通过 Ruby 脚本执行 curl
- python - 将文本文件中的数据正确读取到 numpy 数组中
- angular - Apollo + Angular 突变不适用于变量
- android - 4 FLutter 中可滚动列中的水平列表视图
- python - 如何使用 Google 电子表格执行 Spark Streaming?
- regex - 请求旧网址时,有什么方法可以重定向到干净的网址?