關(guān)于數(shù)組做函數(shù)參數(shù)的問題集合匯總
首先是數(shù)組元素作為函數(shù)的實參,這和直接用多個變量作為函數(shù)的實參在用法上沒有什么差別。
作為例子的代碼:
#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;
}
輸出結(jié)果是:2
然后,是用數(shù)組名作為函數(shù)參數(shù),數(shù)組名其實代表的是數(shù)組首個元素的指針。
#include<iostream>
using namespace std;
int main(){
void alter(int b[]);//b[]括號里面的數(shù)值可寫可不寫,其作用是使編譯系統(tǒng)把它當(dāng)作一維數(shù)組來處理
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;
}
輸出結(jié)果是:
3
4
如果我們這樣寫:
#include<iostream>
using namespace std;
int main(){
void alter(int b[20]);//b[]括號里面的數(shù)值可寫可不寫,其作用是使編譯系統(tǒng)把它當(dāng)作一維數(shù)組來處理
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;
}
輸出結(jié)果:
4
8
為什么我們已經(jīng)定義了a[2]并且還賦值了,傳遞到函數(shù)以后,大小就只有一個單位呢?
其實,我們定義b[ ]或者b[2]或則b[1]、b[20]、b[100],作用都相當(dāng)于是 *b。編譯器直接忽略了,括號里面的數(shù)值。
為了能夠更高的說明,數(shù)組名作為實參實際上是傳遞的數(shù)組的首指針,可以再看一下這個例子:
#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;
}
這個和上面的那個輸出結(jié)果完全一樣!
================================分割線==========================
接下來,總結(jié)一下,數(shù)組的引用相關(guān)問題
首先是一個普通變量作為數(shù)組中一個值的引用的例子:
#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;
}
輸出結(jié)果是:5
普通變量作為數(shù)組中一個值的引用時,在使用上和int &a=b;并沒有什么區(qū)別。
我們很自然的想到,普通的變量可以作為數(shù)組元素的引用,那么數(shù)組元素可否作為其他元素的引用呢?
看下面的代碼:
#include<iostream>
using namespace std;
int main(){
int a[2];
int b=100;
&a[0]=b;//這么做是不被允許的
cout<<a[0]<<endl;
return 0;
}
編譯器報錯了,提示我們這樣做是不被允許的。
但是捏,一個數(shù)組整體可以作為另一個數(shù)組的引用:
#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;
}
因為數(shù)值中的元素是不可以其他變量的引用的額,所以需要用(&b)來說明,這是數(shù)組整體引用,然后還必須寫清楚數(shù)組的大小,即:
(int (&b)[2])
這個使用方法,也就引出了,數(shù)組作為函數(shù)的形參的使用方法。
我們再看數(shù)組作為函數(shù)的形參的時候應(yīng)該是怎樣的。
#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;
}
輸出結(jié)果是
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;
}
相關(guān)文章
C語言數(shù)據(jù)(整數(shù)、浮點數(shù))在內(nèi)存中的存儲
之前對c語言數(shù)據(jù)存儲一直不太明白,最近仔細(xì)研究了一番,所以下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)據(jù)(整數(shù)、浮點數(shù))在內(nèi)存中存儲的相關(guān)資料,需要的朋友可以參考下2021-06-06詳解C語言結(jié)構(gòu)體,枚舉,聯(lián)合體的使用
這篇文章主要給大家介紹一下關(guān)于C語言中結(jié)構(gòu)體、枚舉、聯(lián)合體的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考一下2022-07-07內(nèi)聯(lián)函數(shù)inline與宏定義深入解析
類的內(nèi)斂函數(shù)是一個真正的函數(shù)。使用內(nèi)聯(lián)函數(shù)inline可以完全取代表達(dá)式形式的宏定義2013-09-09C語言?struct結(jié)構(gòu)體超詳細(xì)講解
C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04