私は自動変数の作業を研究しています。私は、それが宣言されているブロックまたは関数内でのみアクセス可能で、その存続時間は同じ関数またはブロック内にあることを知っています。だから次のコードをチェックしようとしています。ヘッダファイルのC言語でのスコープ外の自動変数の使用
/宣言/
void testfn(void);
int *p;
int main(void)
{
testfn();
print("%d\n",*p);
return 0;
}
void testfn(void)
{
int x=444;
p=&x;
}
出力は、 - 444
場合testfn()は私は思っています。終了すると、変数xは破棄されます。次に、ポインタ(* p)が444をどのように表示するかをメイン関数で示します。 これはどのように動作しますか?何か不足している場合。 疑いを明確にしてください。
おかげ
定義されていない動作... – dandan78
これは未定義の動作のものです。実際には動作していない場合は、期待される動作のように見えます。残念ながら、定義されておらず、間違った動作が定義されていません。 –
アドレスは、関数がアクティブであったときと同じ値を持ちますが、それが指すメモリはその関数に割り当てられなくなりました。しかし、これはすべて本当に時間の無駄です。あなたが勉強しようとしていることは分かっていますが、これはあなたがここに投稿するべきものではありません。 –