1

これは私のインストラクターからの私の友人の質問です。変数がプッシュされ、スタックからポップされたときにメソッド関数でローカル変数のメインメソッド値を出力する方法についてです(メソッド関数が変数がプッシュされ、スタックからポップを終了するために到達したため)、それはローカル変数ストレージをメモリに戻します。

main メソッドが 100 を印刷する理由

// Define a global pointer
int *ptr;

int method()
{
    // Define a variable local in this method 
    int local = 100;

    // Set address of local variable (name of variable is local) 
    // in the ptr pointer
    ptr = &local;

    return -1;
}

int main()
{
    // Call method
    method();   

    // Print value of ptr pointer
    cout<<*ptr<<"\n";   

    return -1;
}
4

1 に答える 1

1

主な方法が100を印刷する理由を尋ねている場合.

1.ローカル変数にメモリ空間が割り当てられます。(X で言う。したがって [x]=>100)

2.次に、グローバルなポインターがXのポイントに割り当てられます(ポインター空間がYであるとします。[Y] => X)

3.したがって、ポインターのポイントは X です。

4.ここで、ポインターの値を出力することを選択します。つまり、[[y]]=[x] は 100 です。

ガベージ値が出力されないのは、メモリ空間がローカルに割り当てられなくなったにもかかわらず、その値がまだ含まれているためです。

さらにコードを書いた場合、メモリ内のポイントが別の変数によって上書きされた可能性があります

于 2012-12-04T17:01:57.533 に答える