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++函數,必須將數組中的數據類型,數組的起始位置和數組中元素數量提交給它;傳統方法是將數組名(首地址)作為一個參數,數組長度作為第二個參數。
