0
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 的概念,它们是如何在内部创建节点来帮助我的

4

1 回答 1

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

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

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

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

最后,请注意这void main()是不好的。C 标准说返回类型main()应该是int. 此外,除非您有 C99 或更高版本的编译器,否则您应该包含return(0);或等效于最后一行main()- 或调用exit().

于 2012-09-10T06:40:30.133 回答