c++中數組作為形參時,傳遞的是值還是地址?
運行如下程序
using namespace std; int a[100]={1,2,3,4,5,6,7,8,9}; void cit( int b[100]){//將a的地址傳給b,修改a相當於修改b b[1]=1113;//這里其實修改的是a[1]; cout<<b[1]<<endl; } int main(){ cout<<a[1]<<endl;//輸出數組的第一個元素 cout<<a<<endl;//輸出數組的地址 //char d='A'; cit(a); cout<<a[1]; return 0; }
運行結果:
1.說明:數組作為形參時,傳遞的是地址。
在函數中修改數組就相當於修改了原數組。
注意:函數還可以這樣寫
void cit( int b[]){//將a的地址傳給b,修改a相當於修改b b[1]=1113;//這里其實修改的是a[1]; cout<<b[1]<<endl; }
傳遞時,相等於把數組的首地址傳過去了,這樣可以不設定數組元素的個數。
如果想傳遞數組元素的個數,可以這樣寫數組
void cit( int b[],int n){//將a的地址傳給b,修改a相當於修改b b[1]=1113;//這里其實修改的是a[1]; cout<<b[1]<<endl; }
調用 cit(a,8)
2.你猜如果調用cit(a+4,4)會把數組的那個地址傳過去呢?
對,第5個元素a[4]的地址
using namespace std; int a[100]={1,2,3,4,5,6,7,8,9}; void cit( int b[],int n){//將a的地址傳給b,修改a相當於修改b b[1]=1113;//這里其實修改的是a[5],因為b[0]對應的是a[4]; cout<<b[1]<<endl; } int main(){ cout<<a[1]<<endl;//輸出數組的第一個元素 cout<<a<<endl;//輸出數組的地址 //char d='A'; cit(a+4,4); cout<<a[1]<<endl; cout<<a[5]<<endl; return 0; }
輸出結果如下:
3.如果只想把數組的值傳遞到函數中,不然函數修改數組的值,應該怎么辦呢?
void cit(const int b[],int n)
這樣如果函數中不小心修改了數組,則會彈出錯誤提示
使用const意味着在函數cit中將數組視為只讀數據。
下面的程序就會出錯誤提示
void cit(const int b[],int n){//將a的地址傳給b,修改a相當於修改b b[1]=1113;//這里其實修改的是a[5],因為b[0]對應的是a[4]; cout<<b[1]<<endl; }
總結:處理數字的C++函數,必須將數組中的數據類型,數組的起始位置和數組中元素數量提交給它;傳統方法是將數組名(首地址)作為一個參數,數組長度作為第二個參數。