C++ 结构分配了malloc,为什么?C++;代码分析
该行:C++ 结构分配了malloc,为什么?C++;代码分析,c++,c,list,struct,C++,C,List,Struct,该行: struct Node* newNode = (struct Node*) malloc(sizeof(struct Node)); 为什么实例化的新结构涉及malloc(为结构的大小分配内存块) 另外,struct的重新声明是多余的吗 下面的人不也能完成同样的任务吗 Node* newNode = new Node; 模式代码如下: #include <stdio.h> #include <stdlib.h> struct Node { int
struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));
为什么实例化的新结构涉及malloc(为结构的大小分配内存块)
另外,struct的重新声明是多余的吗
下面的人不也能完成同样的任务吗
Node* newNode = new Node;
模式代码如下:
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int data;
struct Node* next;
};
struct List
{
struct Node *head; // pointer to head node of list
};
//creates a new list Node
struct Node* newListNode(int data)
{
struct Node* newNode =
(struct Node*) malloc(sizeof(struct Node));
newNode->dest = dest;
newNode->next = NULL;
return newNode;
}
#包括
#包括
结构体类型
{
int数据;
结构节点*下一步;
};
结构列表
{
struct Node*head;//指向列表头节点的指针
};
//创建一个新的列表节点
结构节点*newListNode(int数据)
{
结构节点*newNode=
(结构节点*)malloc(sizeof(结构节点));
newNode->dest=dest;
newNode->next=NULL;
返回newNode;
}
你问过
不会Node*newNode=newNode代码>完成相同的任务
Node* newNode = new Node;
不,这在一些非常重要的方面是不等价的。如果此函数的接口(约定)的一部分是返回一个指针,该指针可以传递到free()
,那么使用new
实现它将违反该约定
<>另外,重复使用了 Stult关键字,说明了为了确保代码正确编译,既可以作为C和A+C++,也可以是< /P>,因为它是用C编写的,C不知道代码>新< /代码>,可能需要“代码>结构>代码>,这不是习惯C++,但它是合法C++。可能代码是由(1)知道C优于C++的人编写的,或者(2)是想在C库中使用此源代码的人,以及C++,或者(3)一些类似的情况。询问编写代码的人,如果你想知道他们为什么这样写。我们不是头脑读取者。这个代码看起来像纯C,如果它是纯C,那么它就不会(或者至少不应该)对Maloc的结果进行强制转换。@ Beoviigt:不管怎样,编译C作为C++是不合适的。语义上的基本差异,如前面提到的标签命名空间,使得编译C作为C++适合在微不足道的情况下充其量。代码> const 文件范围内的标识符在C中具有外部链接,但在C++中没有。代码> sieof(‘a’)< /C>产生不同的结果等。实际上,重复使用Stult关键字建议EFF以确保此代码在C++编译器中正确编译。C编译器自动将void*强制转换为任何指针类型。@oopsecene:这不是C代码。根据这个问题,它出现在C++编译单元中。