2011-12-17 16 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では、ノードを作成するために、 "temp"にNULL値を割り当てます。これが必要かどうかわかりません。私たちがNULLで初期化しないと、それを初期化しているときにptrをNULLに割り当てる必要がある場合、どういう意味がありますか?ポインタの初期化:初期化されたポインタにNULLを割り当てるタイミングは?

+0

これは初期化ではありません。初期化は、値を宣言する同じステートメント内の値を指定する場合です。 'tree temp = NULL;'。 –

答えて

1

ノードをNULLに初期化すると、空のノードとNULLノードを区別することができます(NULLをチェックすることによって)。さもなければ、ノードが空であるかどうかを伝える方法がありません。これは、左右のノードについて話しています。 tempがNULLに初期化される理由は明らかではありません。削除することはできます。

何かを指すのに使用するかどうかわからないときはNULLへのポインタを割り当てます。NULLに割り当てられているかどうかをチェックするコードがあります。木を通って動く)。

2

temp = NULLは、その値がすぐに上書きされるため、上記のコードでは不要です。あなたのコンパイラはおそらく最適化段階で冗長コードを削除するでしょう。そのコード行を削除するだけです。

3

malloc()ですぐに上書きされるため、まったく必要ありません。割り当てに失敗した場合は... NULLに設定されます。つまり、コードがバグです!

があるはずです:

if (!temp) 
    return temp; 

malloc()後。

1

NULL割り当ては、プログラマが常に自分の変数を割り当てるという厳しいポリシーを持っていたためと思われます。ここでは必要ではありませんが、悪いポリシーではありません。

関連する問題