2011-12-17 141 views
1
typedef struct nodetype 
{ 
int data; 
struct nodetype * left; 
struct nodetype * right; 
}node; 

typedef node * tree; 

tree newNode(int data) 
{ 
tree temp; 
temp = NULL; 
temp = (tree)malloc(sizeof(nodetype)); 
temp->data = data; 
temp->right = NULL; 
temp->left = NULL; 
return temp; 
} 

這裏在函數newNode中,要創建一個節點,我們給NULL分配一個「temp」值。我不明白這是否有必要。如果我們不用NULL來初始化它,在什麼情況下我應該在初始化時將ptr分配給NULL?上述代碼中的指針初始化:何時將NULL分配給已初始化的指針?

+0

這不是初始化。初始化是指在聲明值的同一語句中指定一個值,例如'樹temp = NULL;'。 – 2011-12-17 22:35:17

回答

1

您將節點初始化爲NULL,以便您可以區分空節點和非空節點(通過檢查NULL)。否則,你無法判斷一個節點是否爲空。這是在談論左右節點。沒有明顯的理由爲什麼temp啓動爲NULL,你可以刪除它。

當你不知道你是否會用它指向某個東西時,你會分配一個指向NULL的指針,並且你將得到檢查它是否被賦值爲NULL的代碼,以便它可以執行一些邏輯(比如穿過一棵樹)。

2

temp = NULL因爲該值立即被覆蓋,所以沒有必要。您的編譯器可能會在優化階段消除冗餘代碼。只需刪除該行代碼即可。

3

這是完全沒有必要的,因爲它會立即被malloc()覆蓋,它會在分配失敗時將其設置爲... NULL,這意味着代碼有問題!在malloc()之後

if (!temp) 
    return temp; 

應該有。

1

我懷疑空分配是因爲程序員有一個嚴格的策略,總是分配他或她的變量。這不是一個糟糕的政策,雖然在這裏沒有必要。