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 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行