我一直在使用 Stanford CS Library 中的 Material 复习单向链表的基础知识,我遇到了以下代码:
struct node{
int data;
struct node* next;
};
struct node* BuildWithDummyNode(){
struct node dummy;
struct node* tail = & dummy; // this line got me confused
int i;
dummy.next = NULL;
for (i=1;i<6;i++){
Push(&(tail->next), i);
tail = tail->next;
}
return dummy.next;
}
可能不是 revenant,但是 Push() 的代码是:
void Push(struct node** headRef, int data){
struct node* NewNode = malloc(sizeof(struct node));
newNode->data = data;
newNode->next = *headRef;
*headRef = newNode;
}
一切都很顺利,但我一直觉得无论何时定义指针,它都必须指向一个已经定义的变量。但是这里只声明了变量“dummy”而没有初始化。这至少不应该产生某种警告吗?
我知道有些变量默认初始化为 0,在打印 dummy.data 之后它确实打印了 0。那么这是“可行但不好的做法”的一个实例,还是我完全遗漏了什么?
非常感谢!
最佳答案
变量 dummy
已在以下语句中声明:
struct node dummy;
这意味着内存已经分配给它。换句话说,这意味着它现在有一个与之关联的地址。因此,指针 tail
在以下行中声明:
struct node* tail = & dummy;
存储它的地址非常有意义。
关于c - 指向 C 中已声明但未初始化的变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868078/