scorescore 2022-03-20 22:25 采纳率: 80%
浏览 36
已结题

帮我看看两种结构体指针与malloc用法

问题遇到的现象和发生背景

我在用malloc为结构体指针分配内存时发现了两种写法但是我不理解为什么

问题相关代码,请勿粘贴截图

例如:typedef struct node
{
int date;
struct node *next;
}node;

node * h=malloc(sizeof( * h));//这是一种写法,我不理解为什么不用在malloc前面强制转换类型,然后分配的空间是多大的,为什么是sizeof(* h),h不是还没指向吗?
node *h;
h=(node *)malloc(sizeof(node))//这种写法就可以比较容易理解。但是我想请教上面一种是为什么。

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 乔乔家的龙龙 C/C++领域优质创作者 2022-03-21 03:29
    关注

    这是可行的但思想上是不一样的,h 的类型为 node* ,是一个结构体指针,他的大小也是已知的,* h 是解引用 h 这个指针变量,等价于 h 指向的结构体,虽然未指向但 malloc 只需要获取目标空间大小即可,该结构体大小同定义结构体大小一样,根据自义定类型对齐机制可计算结构体大小,date 整型大小为 4 字节,next 指针类型大小为 4 字节,如果编译器为 vs (默认对齐数为 8)则正好偏移量为 0和4得到该结构体大小为 8 字节,即可实现 malloc。
    ps:扣字不易,如有帮助,还请点个采纳捏~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 修改了问题 3月20日
  • 修改了问题 3月20日
  • 展开全部

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探