c - 指向 C 中已声明但未初始化的变量的指针

标签 c pointers initialization

我一直在使用 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/

相关文章:

c - 需要将 c 中文件中的值转换为 int/float

C 查找某个单词的所有实例

c - 没有 fflush(stdout) 输出不打印

c++ - 如何在 C++ 中删除这个二维数组

C++ : Why isn't my call to "std::uninitialized_copy" working?

c++ - 如何使用初始化列表来选择要使用的构造函数?

java - 我的类中的一个字段可以是其他两个字段的总和吗? ( java )

c - 释放链表中的节点

c - C中的智能指针实现

c++ - 使用 nullptr 作为 std::unordered_map 的键有什么后果吗?