簡體   English   中英

初始化struct的成員

[英]Initializing a struct's members

我正在閱讀C語言中的struct ,我並不完全理解struct初始化的方式。 請考慮以下代碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct tnode {
    char *word;
    int count;
    struct tnode *left;
    struct tnode *right;
};


int main (void)
{
    struct tnode *root;
    struct tnode tn1;
    root = &tn1;
    printf("%d\n", root->count);

    if (root->word == NULL)
        printf("word is NULL\n");
    else
        printf("word is not NULL\n");

    if (root->right == NULL)
        printf("rightis NULL\n");
    else
        printf("right is not NULL\n");
}

輸出:

0
word is NULL
right is not NULL

我無法理解為什么root->right沒有初始化為NULL 有人可以請一些光嗎?

我無法理解為什么root->right沒有初始化為NULL

C只會初始化全局定義的變量和/或聲明為static變量本身。 如果代碼沒有明確地完成,則所有其他變量都保持未初始化。

您顯示的代碼讀取未初始化的變量。 這樣做可能會調用未定義的行為。 看到0NULL只是(壞)運氣。 變量可以容納任何東西。

C11標准(草案)6.7.9 / 10

如果未顯式初始化具有自動存儲持續時間的對象,則其值不確定。 如果未顯式初始化具有靜態或線程存儲持續時間的對象,則:

- 如果它有指針類型,則將其初始化為空指針;

- 如果它有算術類型,則初始化為(正或無符號)零;

- 如果它是一個聚合,則根據這些規則初始化(遞歸)每個成員,並將任何填充初始化為零比特;

- 如果它是一個聯合,則根據這些規則初始化(遞歸)第一個命名成員,並將任何填充初始化為零位;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM