结构变量的动态分配

时间:2019-01-27 06:20:03

标签: c++ data-structures linked-list structure

以下是我学习的动态内存分配方法,

Service

int *p = new int; 

但是在另一个链表程序中,我看到了结构的变化

pointer-variable = new data-type;

其实例的声明就像

struct node
{
    int info;
    struct node *next;
}

我的意思是应该错了,因为根据语法,它不应该包含struct,应该像这样

struct node *temp, *s;
temp = new(struct node);

我在哪里错,有人可以指导我吗?

这是Service Gateway,请参考第1行的代码。 125和126。

3 个答案:

答案 0 :(得分:0)

您的问题确实与动态分配无关。

在C ++中说struct node { ... };时,它会创建两个类型名称,nodestruct node,它们都引用相同的类型:

node x;
struct node y;  // x and y are variables of the same type

出现这种奇怪行为的原因是C ++基于C。在C中,struct node { ... };仅创建单个类型名称struct node。您必须手动使用typedef才能获得不包含struct的较短名称:

typedef struct node { ... } node;  // C

C ++希望更轻松地创建短类型名称,而不必在任何地方键入struct,同时保持与现有C代码的兼容性。

(此外,还有一个通用的unix函数,称为stat,该函数需要一个指向结构的指针,该结构也称为stat

int stat(const char *, struct stat *);

这里struct stat明确地指向类型,而不是函数。 C ++必须支持此语法才能调用stat。)

您的代码以类似C的怪异风格编写(各处都包含struct关键字),但是new在C中不存在,因此它不可能是实际的C。

答案 1 :(得分:-1)

node *temp, *s;
temp = new node ;

这是C ++中动态内存分配的语法

但是,

struct node *temp, *s;
temp = (node*)malloc(sizeof(struct node));  

这是C语言中使用的语法  在C语言中,关键字“ struct”必须写在结构名称之前。

关键字“ new”不在C中。

答案 2 :(得分:-1)

//使用类似于此的代码.....

struct node *temp, *s;
temp = (struct node*) new(struct node);

//因为temp是结构节点指针,所以我们需要在分配之前进行类型转换。