2014-01-23 23 views
0

我只是在玩功能和參數。作爲價值調用傳遞的變量的地址

#include <iostream> 
using namespace std; 

int function(char *str,int b); 
int main() 
{ 
     char *str = new char[10]; 
     memset(str,0,10); 

     int a = 10; 
     int b = 10; 
     function(str,b); 
     function(str,a); 
} 

//FUnction Definition 
int function(char *str,int b) 
{ 
     cout << &str << "\t" << &b << "endl" 

     return 0; 
} 

我編譯這段代碼在VS2010 C++ ,, 當我們按值傳遞的東西,將創建一個新的值複製從它傳遞變量的內容。所以在功能體上肯定b將有不同的地址。 我所看到的是函數參數在多個調用中保持在相同的地址位置。

什麼,我猜是這些功能的參數均被映射內存位置,它西港島線包含呼籲功能

我只是想知道變量會這樣或者還有別的東西。

+0

相關:http://stackoverflow.com/q/6441218/509868 – anatolyg

回答

0

局部變量的地址可以重新用於後續調用。這沒什麼錯。

0

究其原因,局部變量是在內存中的同一地址,是因爲你是從main -> function調用和堆棧總是被以同樣的方式。如果你改變了你的代碼,以使當地人function

調整main調用另一個函數,然後調用function然後你會注意到局部變量和參數有一個不同的地址,因爲他們將在一個不同的地址在一個堆棧幀。

注意:這一切都假設你的編譯器沒有做和優化。