これがプログラムです:
#include <stdio.h>
main() {
int * i;
int * j;
printf("%d\n", i);
printf("%d\n", j);
}
私はそれをコンパイルして実行しました、そして出力は次のとおりでした:
888086464
0
ただし、2番目のprintfをコメントアウトすると
#include <stdio.h>
main() {
int * i;
int * j;
printf("%d\n", i);
//printf("%d\n", j);
}
出力beomes:
0
なぜ2番目のprintfがポインタiを変更するのか疑問に思います。
そして、Cはどのようにポインターを初期化しますか?私の知る限り、ポインタが初期化されていない場合、その値はNullになります。これは0に等しいですよね?なぜ最初の出力でiが初期化されたのですか?
編集:皆さんからの提案に従って、私はいくつかの変更を加えました:
#include <stdio.h>
main() {
int * i;
int * j;
printf("%p\n", i);
printf("%p\n", j);
}
これは
0x7fff67a361b0
(nil)
しかし、2番目のprintfをコメントアウトすると
#include <stdio.h>
main() {
int * i;
int * j;
printf("%p\n", i);
//printf("%p\n", j);
}
出力はnilです。2つのprintfを含む最初のバージョンで、jだけがnilで、iはnilではないのはなぜか不思議です。