编程原理与实践第27章指示性清单错误? 我正在阅读编程:Bjarne Stroustrup用C++编写的原理和实践,我来到第27章,遇到了一些可疑的东西。这是一行代码: struct List* lst = (List*)malloc(sizeof(struct List*));
我的问题是,这不应该写为:编程原理与实践第27章指示性清单错误? 我正在阅读编程:Bjarne Stroustrup用C++编写的原理和实践,我来到第27章,遇到了一些可疑的东西。这是一行代码: struct List* lst = (List*)malloc(sizeof(struct List*));,c++,pointers,malloc,C++,Pointers,Malloc,我的问题是,这不应该写为: struct List* lst = (List*)malloc(sizeof(struct List)); 当我用第一个版本编译程序时,它工作得很好,但我看到malloc被用作第二个版本 所以我的问题是,哪个版本是正确的,有什么区别 PS:本书是关于C++的,但本章试图提出一种在C.写作的方法,所以这实际上是一个C程序。 < P>经验法则:当处于混乱状态时,检查数据类型。 在您的例子中,lst是一个指针,它指向类型为struct List的变量。因此,保存结构列
struct List* lst = (List*)malloc(sizeof(struct List));
当我用第一个版本编译程序时,它工作得很好,但我看到malloc被用作第二个版本
所以我的问题是,哪个版本是正确的,有什么区别
PS:本书是关于C++的,但本章试图提出一种在C.写作的方法,所以这实际上是一个C程序。
< P>经验法则:当处于混乱状态时,检查数据类型。 在您的例子中,lst
是一个指针,它指向类型为struct List
的变量。因此,保存结构列表所需的内存位置将是sizeof(struct List)
。因此,第二个版本是有意义的
附言:祝贺你,你认为正确:)
它还显示,List
也被定义为typedef
,否则转换是语法错误
注:
如果将该代码作为C代码段,则
至于惯用C++,也不正确。因为MALLC不调用构造函数,所以C++的发明人会编写(基本上)C代码,C代码也可能出错。也许他写的程序,给出了坏的东西,C的例子,并对比它应该如何写在C++中?对于我们来说,没有这本书或者没有现成的书是不难知道的,因为没有上下文,只有两行代码可能有任何意义。@Someprogrammerdude不是在这种情况下,第一行是完全错误的?我是不是遗漏了一些太明显的东西?@SouravGhosh从语义上说,这肯定是错误的,但这实际上取决于结构的大小、内容和可能的构造函数。如果sizeof(List)
恰好与sizeof(List*)
相同(虽然不太可能),并且它是POD类型,那么它可以正常工作。@Someprogrammerdude同意,但可能性很小。另外,第一个即使有效,也显示出缺乏理解-->编程糟糕,唐;对不起,但是在C++的情况下,你使用的是MalCube(),我猜你需要的是演员。malloc返回一个void*。在C语言中,演员阵容是隐式的。耶,很抱歉混淆了。你完全正确。