2016-12-13 4 views
0

私はので、私はCで宣言されていないポインタをNULLに自動的に代入できますか?

typedef struct 
{ 
    int *isInitialized; 
} Thing; 

int main() 
{ 
    Thing a; 
    //Only if initialized, should always fail now 
    if (a.isInitialized == NULL) 
    { 
     //Code 
    } 
    //I'm saying a is initialized 
    a.isInitialized = NULL; 
} 

この作品はウィルか宣言する際にポインタが自動的にNULLに割り当てられます任意の(小さな)チャンスがあるを使用してのthaught定義された構造体が を初期化されているかどうかを確認したいですか?

編集: 私はそれが必ずしもNULLではないことを知っています。それは今までにNULLであるか、それは常にいくつかのランダムな、NULLでないポインタ

+1

私はこの質問に対する答えがここにあると思います:http://stackoverflow.com/a/1597426/3306402 – Sxilderik

答えて

0

になる場合 私が求めているウィルこの作品または宣言するときにポインタが自動的にNULLに割り当てられます任意の(小さな)チャンスがあります?

いいえ、できません。初期化されていないポインタが常にNULLであるという保証はありません。 intと同様に

は、int初期化は、ポインタ変数がローカルとして宣言されている場合は、よく、ポインタが同じ値を持っていることのチャンスがある0

int a; 
if(a == 0) // should always be zero 
{ 
    // code 
} 
else // a must be initialised? wrong 
0

であるという保証はありませんNULL。すぐに問題が発生するのは、1)これが起こるときはかなりランダムであり、2)コンパイラは初期化されていない変数にアクセスしていると不満を持ちます。

一方、ポインタがグローバルで初期化されていないと宣言されている場合は、その内容がゼロに初期化されていることが保証されます。ほとんどの場合、NULLに対応します。

関連する問題