You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言堆上分配节点:先赋值NULL再malloc与直接malloc的等价性

两个栈初始化函数写法的等价性分析

是的,这两种写法完全等价,原因如下:

  • 原写法里先把node初始化为NULL,但紧接着就用malloc的返回值覆盖了这个变量,这个NULL初始化属于冗余操作,对后续逻辑没有任何实际影响。
  • 修改后的写法直接在变量声明阶段用malloc的结果完成初始化,省略了无意义的NULL赋值,但最终node的取值、函数的执行逻辑和返回结果都和原写法完全一致。

额外补充:两种写法都存在一个细节问题——新分配的节点的data和next成员处于未初始化的随机值状态。如果这个节点是栈的哨兵头节点,建议显式把next设为NULL,避免后续栈操作出现未定义行为。

内容的提问来源于stack exchange,提问作者v_head

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:11:13