[英]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
變量本身。 如果代碼沒有明確地完成,則所有其他變量都保持未初始化。
您顯示的代碼讀取未初始化的變量。 這樣做可能會調用未定義的行為。 看到0
或NULL
只是(壞)運氣。 變量可以容納任何東西。
如果未顯式初始化具有自動存儲持續時間的對象,則其值不確定。 如果未顯式初始化具有靜態或線程存儲持續時間的對象,則:
- 如果它有指針類型,則將其初始化為空指針;
- 如果它有算術類型,則初始化為(正或無符號)零;
- 如果它是一個聚合,則根據這些規則初始化(遞歸)每個成員,並將任何填充初始化為零比特;
- 如果它是一個聯合,則根據這些規則初始化(遞歸)第一個命名成員,並將任何填充初始化為零位;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.