首先是數組元素作為函數的實參,這和直接用多個變量作為函數的實參在用法上沒有什么差別。
作為例子的代碼:
#include<iostream>
using namespace std;
int main(){
int max(int a,int b);
int a[2],m;
a[0]=1;
a[1]=2;
m=max(a[0],a[1]);
cout<<m;
return 0;
}
int max(int a,int b ){
if(a<b)a=b;
return a;
}
輸出結果是:2 然后,是用數組名作為函數參數,數組名其實代表的是數組首個元素的指針。
#include<iostream>
using namespace std;
int main(){
void alter(int b[]);//b[]括號里面的數值可寫可不寫,其作用是使編譯系統把它當作一維數組來處理
int a[2];
a[0]=1;
a[1]=2;
alter(a);
cout<<a[0]<<"/n";
cout<<a[1]<<"/n";
return 0;
}
void alter(int b[]){
b[0]=3;
b[1]=4;
}
輸出結果是: 3
4
如果我們這樣寫:
#include<iostream>
using namespace std;
int main(){
void alter(int b[20]);//b[]括號里面的數值可寫可不寫,其作用是使編譯系統把它當作一維數組來處理
int a[2];
a[0]=1;
a[1]=2;
alter(a);
cout<<sizeof(a);
return 0;
}
void alter(int b[20]){
cout<<sizeof(b)<<endl;
}
輸出結果: 4
8
為什么我們已經定義了a[2]并且還賦值了,傳遞到函數以后,大小就只有一個單位呢?
其實,我們定義b[ ]或者b[2]或則b[1]、b[20]、b[100],作用都相當于是 *b。編譯器直接忽略了,括號里面的數值。
為了能夠更高的說明,數組名作為實參實際上是傳遞的數組的首指針,可以再看一下這個例子:
#include<iostream>
using namespace std;
int main(){
void alter(int *b);
int a[2];
a[0]=1;
a[1]=2;
alter(a);
cout<<a[0]<<"/n";
cout<<a[1]<<"/n";
return 0;
}
void alter(int *b){
*b=3;
*(b+1)=4;
}
這個和上面的那個輸出結果完全一樣! ================================分割線==========================
接下來,總結一下,數組的引用相關問題
首先是一個普通變量作為數組中一個值的引用的例子:
#include<iostream>
using namespace std;
int main(){
int a[2];
a[0]=1;
a[1]=2;
int &t=a[0];
t=5;
cout<<a[0]<<"/n";
return 0;
}
輸出結果是:5 普通變量作為數組中一個值的引用時,在使用上和int &a=b;并沒有什么區別。
我們很自然的想到,普通的變量可以作為數組元素的引用,那么數組元素可否作為其他元素的引用呢?
看下面的代碼:
#include<iostream>
using namespace std;
int main(){
int a[2];
int b=100;
&a[0]=b;//這么做是不被允許的
cout<<a[0]<<endl;
return 0;
}
編譯器報錯了,提示我們這樣做是不被允許的。但是捏,一個數組整體可以作為另一個數組的引用:
#include<iostream>
using namespace std;
int main(){
int a[2];
a[0]=1;
a[1]=2;
int (&b)[2]=a;
b[0]=3;
b[1]=4;
cout<<a[0]<<endl;
cout<<a[1]<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main(){
int a[2];
a[0]=1;
a[1]=2;
int (&b)[2]=a;
b[0]=3;
b[1]=4;
cout<<a[0]<<endl;
cout<<a[1]<<endl;
return 0;
}
因為數值中的元素是不可以其他變量的引用的額,所以需要用(&b)來說明,這是數組整體引用,然后還必須寫清楚數組的大小,即:
(int (&b)[2])
這個使用方法,也就引出了,數組作為函數的形參的使用方法。 我們再看數組作為函數的形參的時候應該是怎樣的。
#include<iostream>
using namespace std;
int main(){
void sm(int (&b)[2]);
int a[2];
a[0]=1;
a[1]=2;
sm(a);
cout<<a[0]<<endl;
cout<<a[1]<<endl;
return 0;
}
void sm(int (&b)[2]){
b[0]=3;
b[1]=4;
}
輸出結果是 3
4
#include<iostream>
using namespace std;
int main(){
int a[2];
a[0]=1;
a[1]=2;
int (&b)[2]=a;
b[0]=3;
b[1]=4;
cout<<a[0]<<endl;
cout<<a[1]<<endl;
return 0;
}