關(guān)于數(shù)組做函數(shù)參數(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í)代表的是數(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ù)以后,大小就只有一個單位呢?
其實(shí),我們定義b[ ]或者b[2]或則b[1]、b[20]、b[100],作用都相當(dāng)于是 *b。編譯器直接忽略了,括號里面的數(shù)值。
為了能夠更高的說明,數(shù)組名作為實(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;
}
因?yàn)閿?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)文章
Qt使用QChart實(shí)現(xiàn)靜態(tài)顯示溫度變化曲線
QChart模塊是Qt?Charts庫的基礎(chǔ),提供了用于創(chuàng)建和顯示各種類型圖表的類和接口,本文主要介紹了如何使用QChart實(shí)現(xiàn)動態(tài)顯示3個設(shè)備的溫度變化曲線,感興趣的可以了解一下2023-06-06
解決c++?error:crosses?initialization?of?問題
最近在寫代碼的時候,碰到了?crosses?initialization?of?...?的問題,只因我在?switch?的某個?case?分支下定義了一個變量,于是乎便將這個問題整理一下,需要的朋友可以參考下2023-03-03
C語言實(shí)現(xiàn)模擬USB對8bit數(shù)據(jù)的NRZI編碼輸出
今天小編就為大家分享一篇關(guān)于C語言實(shí)現(xiàn)模擬USB對8bit數(shù)據(jù)的NRZI編碼輸出,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

