次のコードを考慮してください。C-関数がローカル変数へのポインタを返す
#include<stdio.h>
int *abc(); // this function returns a pointer of type int
int main()
{
int *ptr;
ptr = abc();
printf("%d", *ptr);
return 0;
}
int *abc()
{
int i = 45500, *p;
p = &i;
return p;
}
出力:
私はlinkに係る行動のこのタイプが定義されていません知っています。しかし、なぜ私はプログラムを実行するたびに正しい値を得ているのですか?
未定義の動作が許可されているためです。ところで、私はこの質問に間違ったことは何も見ません。 Upvoted。 – Bathsheba
あなたのプログラムはとてもシンプルだからです。 'abc()'と 'printf()'の呼び出しの間に他の関数への呼び出しを挿入してみてください – Serge
だから何ですか? "不定"とは "ランダム"を意味するものではありません... –