C语言堆上分配节点:先赋值NULL再malloc与直接malloc的等价性
两个栈初始化函数写法的等价性分析
是的,这两种写法完全等价,原因如下:
- 原写法里先把
node初始化为NULL,但紧接着就用malloc的返回值覆盖了这个变量,这个NULL初始化属于冗余操作,对后续逻辑没有任何实际影响。 - 修改后的写法直接在变量声明阶段用
malloc的结果完成初始化,省略了无意义的NULL赋值,但最终node的取值、函数的执行逻辑和返回结果都和原写法完全一致。
额外补充:两种写法都存在一个细节问题——新分配的节点的data和next成员处于未初始化的随机值状态。如果这个节点是栈的哨兵头节点,建议显式把next设为NULL,避免后续栈操作出现未定义行为。
内容的提问来源于stack exchange,提问作者v_head
相关产品推荐
相关产品推荐

