2012-05-03 8 views
0

これは私が疑問に思っていたものです。 さて、ここでは、 私は関数内の変数を宣言すると、私はこの変数を別の関数へのポインタとして渡します。 最初の関数(変数が宣言されている場所)が終了したとき、この変数はどうなりますか? スタックに残っているのですか、機能が終了すると削除されますか?予め関数からポインタを送信する

おかげ= D

+2

それはストレージに依存します変数の指定子。 – Mahesh

答えて

4

あなたがそれを静的と宣言していない限り、変数を定義する関数が戻り値を返したときには、が破棄されます。ここではC.にストレージクラスを確認することはポインタです:http://aelinik.free.fr/c/ch14.htm

+0

リンクをありがとう、今すぐお読みください! – Davey

1

最初の関数は、変数は、したがって、ポインタは無効となり、破壊され終了します。

+0

お返事ありがとう=) – Davey

1

あなたがスタック上にこの変数を宣言した場合、それはdisapearます:

void foo() 
{ 
    int varInStack; 
    foo2(&varInStack); 

    // when foo returns, you loosed your variable. 
} 

あなたはそれを返すことがあります。

int foo() 
{ 
    int varInStack; 
    foo2(&varInStack); 

    return varInStack; 
} 
+0

それを戻しても、ポインタがぶら下がってしまうことはありません。関数が返ったら、ローカル変数へのポインターは無効です。 – cHao

+0

異なる回答。したがって、それをローカルスコープから戻すと、ポインタが破棄されます。 – Davey

+0

@Davey:いいえ。 *ポインタ*はまだ存在します。一度変数が破壊されるとFSM-knowsを指し示すだけです。 – cHao

関連する問題