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的变量,所以它必须包含指针的大小&a
int
。但为什么我们还在分配内存呢。请澄清这一疑问。

我将尝试简要解释您的问题,但为了解决您的困惑,@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;