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 的概念,它们如何在内部创建节点 谢谢你帮助我
最佳答案
您可以声明结构类型而不声明任何变量。但是,您的代码定义了一个指针变量
start
。变量
start
被初始化为0,因此它没有指向任何东西。变量
tmp
和q
根本没有初始化,在赋值之前不能安全使用。您在下一行中初始化tmp
;q
仍未初始化。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/