c - 将变量定义为结构体

标签 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=(struct node *)malloc(sizeof(struct node));
 }

这里void addbeg是一个函数,现在我们在这里声明另一个变量 struct node ,那么为什么我们要为其分配等于 int 的内存呢? ,因为它是一个结构节点的变量,所以它必须包含指针和 int 的大小。但为什么仍然分配内存。还请解开这个疑惑。

最佳答案

我会尝试简要解释您的问题,但为了解决您的困惑,@ForceBru 的评论是正确的想法。

  1. C中使用struct,在定义struct之后定义变量是执行这些操作的捷径分两步,即等于define the struct + struct node *head(定义一个指向struct节点的变量/指向节点的指针)。

  2. temp 作为指向结构节点的指针,与变量 node 类似,只不过它现在指向刚刚在中分配的真实结构节点内存空间(使用malloc)。它与以下代码类似,但不同之处在于编译器或您自己是否应该管理分配的内存(由于动态内存分配)。

    // define a struct node that's allocated and managed by the compiler
    struct node nodeOfTemp;
    struct node *temp = &nodeOfTemp;
    

关于c - 将变量定义为结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42180606/

相关文章:

sql - SQL Server索引B树是平面结构还是深度结构

pointers - 为什么在 Go 中不能将整数添加到 "dereferenced"指针变量?

java - 使用插入排序java删除重复项

C pthread 和 struct 问题

c - 在 C 中打印结构体的名称

c - pthread_cancel 在 solaris 下不工作

c - 解释这个 C 程序的工作

c++ - 是否有用于指针删除的函数(对象)模板可用于在某处重复使用(boost,STL)?

c++ - 只有数组的一个元素被传递给函数。 C++

python - 对字典数组进行排序以使不同组的成员相邻