2017-01-16 18 views
1

意図的にCでNULLポインタを取得しようとしましたが、これを実行できませんでした。ここで私はコーディングされたものです。CでNULLポインタエラーが発生しない

int main(void) { 
    int x; //UNINITIALIZED so that it will represent "nothing" 
    int *null_test = &x; 
    printf("This should be null %p \n", null_test); 
} 

をしかし、それは私の住所与えた:0x7fd96c300020私は期待していたとしてNULLように見えるdoes notの。

なぜ?私はxを初期化していませんでしたが、まだヌルではありませんか?

+2

あなたは 'NULL_test'に' NULL'を割り当てませんでした。 –

+0

あなたが必要とするのは 'int * null_test = 0;' –

+0

'int x'が' int'を定義するだけです。 'int'は定義によって' NULL'にすることはできません。ポインタは 'NULL'でもかまいません。 – alk

答えて

9

null_test

int *null_test = &x; 

した後、それを含む割り当て xのアドレス。 xが初期化されていない場合でも、このアドレスは xの内容とは無関係です。

5

なぜですか?私はinitializexもしなかったが、まだヌルではない?

1)定義と2)初期化を区別する必要があります。変数は、メモリが割り当てられたときに定義されます。変数は、そのメモリ位置が何らかの値で満たされたときに初期化されます。ここ

xは初期化されていないが、すでにに定義されている - を割り当てられることを意味する - それはxはメモリ内の特定の位置を有することを意味します。そしてそう&xはNULLとそうnull_testではありません。

int *null_test = &x;

あなたはnull_testはNULLになりたい場合は、単に明示的

int *null_test = NULL;

+0

はデフォルトで0に設定されていますか? – Amad27

+0

いいえ、初期化されていないローカル変数は、ゼロを保証しない任意の値を取得できることを意味します。 – artm

関連する問題