C 为结构定义变量
下面是为制作链表而编写的代码的一部分C 为结构定义变量,c,pointers,data-structures,structure,dynamic-memory-allocation,C,Pointers,Data Structures,Structure,Dynamic Memory Allocation,下面是为制作链表而编写的代码的一部分 struct node { int data; struct node *link; }*head; 在上面的源代码中,我想询问head是否是“node”的变量。我认为,正如我用结构声明的那样,它必须是已定义结构的变量&因此包含数据部分和地址部分。 如果我错了,谁能告诉我*head的角色是什么&它是不是一个变量 现在,这是同一源代码的第二部分 void addbeg() { int d,g; struct node *temp; temp=(s
struct node
{ int data;
struct node *link;
}*head;
在上面的源代码中,我想询问head是否是“node”的变量。我认为,正如我用结构声明的那样,它必须是已定义结构的变量&因此包含数据部分和地址部分。
如果我错了,谁能告诉我*head的角色是什么&它是不是一个变量
现在,这是同一源代码的第二部分
void addbeg()
{
int d,g;
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
}
这里的
void addbeg
是一个函数,现在我们向struct node
声明了另一个变量,那么为什么我们要将它的内存分配为等于int
,因为它是struct node的变量,所以它必须包含指针的大小&aint
。但为什么我们还在分配内存呢。请澄清这一疑问。我将尝试简要解释您的问题,但为了解决您的困惑,@ForceBru的评论是正确的想法
C
中使用struct
,在定义struct
之后立即定义变量,这是分别执行这两个步骤的捷径,即它等于定义struct
+struct node*head
(定义指向结构节点的变量/指向节点的指针)temp
作为指向结构节点的指针类似于变量node
,只是它现在指向的是刚刚分配到内存空间中的真实结构节点(使用malloc
)。它类似于下面的代码,但不同之处在于编译器还是您自己应该管理分配的内存(由于动态内存分配)
那么请告诉我们,为什么要为单个
结构分配内存?对于第一个问题,*head
是指向struct节点的指针。哦,哇,你必须先学习C语言中的指针和内存管理(以及struct
s声明),否则,任何答案都将是非常可笑的。请考虑下面的代码结构StUngStult学生{char name(50);int滚动;浮点标记;}s1;这里s1是student的上述结构的一个变量,将具有结构的所有部分&而不是任何地址,为什么在上述结构节点的情况下,*head是一个指针。
// define a struct node that's allocated and managed by the compiler
struct node nodeOfTemp;
struct node *temp = &nodeOfTemp;