c - 结构体和链表

标签 c struct linked-list

struct node
{
int info;
struct node *link;
}*start;
void main()
{
struct node*tmp,*q;
tmp=(struct node*)malloc sizeof(struct node);
}

现在我的第一个问题是,当我们声明结构时,是否会在内存中创建任何结构类型节点?

第二个问题是,如果是,那么这里我采用一个指向结构类型节点的起始指针,因此无需指定起始指针的结构节点的地址,起​​始指针如何指向在声明期间创建的结构类型节点,请清除我这在内部是如何发生的,我对此有很多困惑

第三个问题是最初 tmp 和 q 指针变量都指向同一个结构节点

请解释一下 malloc 和 calloc 的概念,它们如何在内部创建节点 谢谢你帮助我

最佳答案

  1. 您可以声明结构类型而不声明任何变量。但是,您的代码定义了一个指针变量 start

  2. 变量start被初始化为0,因此它没有指向任何东西。

  3. 变量tmpq根本没有初始化,在赋值之前不能安全使用。您在下一行中初始化tmpq 仍未初始化。

  4. malloc()为指针提供指向的空间;它不会初始化该空间。 tmp->info 中的值是不确定的; tmp->link 中的值也是不确定的。如果您使用了calloc(),那么tmp->info将为零,tmp->link将为空(在所有实际系统上) — 理论上,可能存在一个tmp->link 未正确初始化的系统)。

最后,请注意 void main() 是不好的。 C 标准规定 main() 的返回类型应该是 int。此外,除非您有 C99 或更高版本的编译器,否则您应该包含 return(0); 或等效内容作为 main() 中的最后一行,或者调用退出()

关于c - 结构体和链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12341650/

相关文章:

c++ - 如何分配一个结构然后增加它的大小?

c++ - 重载多个运算符时出现“不匹配”错误

java - 实现双向链表的迭代器

c - 范围在功能中不受尊重?

java - 我在哪里可以看到 Sun JDK 的源代码?

c - 重新分配() : invalid next size: 0x00000000

c - 生成由编译器定义的预处理器宏列表

c++ - 如何通过最小增量(或接近它)改变 float ?

c++ - 编写自定义脚本语言

c++ - 结构 vector push_back C++