以下是我学习的动态内存分配方法,
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。
答案 0 :(得分:0)
您的问题确实与动态分配无关。
在C ++中说struct node { ... };
时,它会创建两个类型名称,node
和struct 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是结构节点指针,所以我们需要在分配之前进行类型转换。