【发布时间】:2014-04-15 17:23:38
【问题描述】:
行:
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;
}
【问题讨论】:
-
因为它是用 C 编写的,而 C 不知道
new,可能到处都需要struct。 -
这不是惯用 C++,而是合法 C++。代码可能是由 (1) 比 C++ 更了解 C 的人编写的,或 (2) 想在 C 库和 C++ 中使用此源代码的人,或 (3) 某些类似情况。 如果您想知道他们为什么这样写代码,请询问编写代码的人。我们不介意读者。
-
这段代码在我看来像纯 C
-
如果它是纯 C,那么它不会(或至少不应该)对 malloc 的结果进行强制转换。
-
@BenVoigt:无论如何,将 C 编译为 C++ 并不总是合适的。语义上的根本差异(例如前面提到的标记命名空间)使得将 C 编译为 C++ 充其量只适用于微不足道的情况。
const文件范围的标识符在 C 中具有外部链接,但在 C++ 中没有。sizeof('a')产生不同的结果等等。