繁体   English   中英

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

[英]Pointer to declared but uninitialized variable in C

我一直在审查C中单链表的基础知识和来自斯坦福CS图书馆的资料 ,我在这里找到了以下代码:

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;
}

可能不是rev​​enant,但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;

存储它的地址非常有意义。

“但是这里变量”dummy“只是声明而不是初始化。”

变量声明将其引入范围。 你是正确的推断它的值是未指定的,但是从它进入范围的那一刻开始,直到它超出范围,从而获取和使用它的地址是正确的。

更简单地说:你的程序是正确的,因为你不依赖于未初始化的变量值,而是取决于它定义良好的地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM