box さんが書きました: ↑3年前
ポインター変数wに、即値を直接代入することは未定義のはずです。
(0を除く)整数からポインタへの変換は「処理系定義」であり、「未定義」ではないと思います。
(
N1570 6.3 Conversions → 6.3.2.3 Pointers)
ただし、
toma さんが書きました: ↑3年前
コード:
int *w = 5;
printf("%d\n",w);
のように、書式 %d に int* 型の値を渡すのは、書式と渡されるデータの型がマッチしないので未定義動作になります。
(N1570 7.21.6.1 The fprintf function の 9)
box さんが書きました: ↑3年前
もし、アドレス値を出力したいのであれば、
コード:
#include <stdio.h>
int main(void)
{
int *w;
printf("%p\n", w);
return 0;
}
な風にすればよいと思います。
未初期化の自動変数の値は不定であり、その値を使うと未定義動作になります。
また、書式 %p が受け取るのは void* 型のデータであり、
int* 型のデータを渡すのは(通常の環境では問題にはなりにくそうですが、厳密には) 未定義動作になります。
コード:
#include <stdio.h>
int main(void)
{
int a;
int *w = &a; /* 初期化する */
printf("%p\n", (void*)w); /* 正しい型にキャストする */
return 0;
}
な風にすればよいと思います。