2012-12-04 155 views
1

這是我關於如何打印方法函數的局部變量的 主要方法價值教練我的朋友的問題時,它的 變量推,並從彈出堆棧(因爲當法功能 稱爲它的變量推當它達到從 堆棧結束彈出),然後它是本地變量存儲回內存。全局指針

爲什麼主要方法打印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; 
} 

回答

1

如果你問爲什麼的主要方法是印刷100

1.局部變量被分配一定的存儲空間。 (在X.說因此[X] => 100)

2.指針是全球然後在X.分配給點(比如說指針空間Y. [Y] => X)

3.因此,指針的點是X.

4.現在您選擇打印指針的值。即[[y]] = [x]是100.

爲什麼不打印垃圾值是因爲即使內存空間不再分配給本地,它仍然包含該值。

如果你寫了更多的代碼,內存中的點可能已被另一個變量覆蓋

+0

我認爲這個想法是特定於操作系統。我在unix中看到了這種行爲。 –

+0

不要這樣想。我在Windows中看到了這種行爲,並且據我所知只是一般的C概念 – cjds