我正在阅读编程:Bjarne Stroustrup使用C ++进行原理和练习,我到了第27章,遇到了一些可疑的东西。正是这行代码:
struct List* lst = (List*)malloc(sizeof(struct List*));
我的问题是,不应该写成:
struct List* lst = (List*)malloc(sizeof(struct List));
当我使用第一个版本编译程序时,它工作正常,但我已经看到malloc被用作第二个版本。
所以我的问题是,哪个版本是正确的,有什么区别?
PS:这本书是关于C ++的,但本章试图用C语言来表达。所以这实际上是一个C程序。
答案 0 :(得分:1)
经验法则:遇到困惑时,请检查数据类型。
在您的情况下,lst
是一个指针,指向类型为struct List
的变量。因此,保留struct List
所需的内存位置为sizeof(struct List)
。所以,第二个版本是有道理的。
P.S。:恭喜,您认为正确:)
同样,List
也被定义为typedef
,否则强制转换是语法错误。
注:
如果要将此代码作为C片段,please see this discussion on why or why not to cast the return value of malloc()
and family in C
.。