關(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;
}
上一篇:輸入3個字符串,將它們按照字母由大到小排序(示例代碼)
欄 目:C語言
本文標(biāo)題:關(guān)于數(shù)組做函數(shù)參數(shù)的問題集合匯總
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3954.html
您可能感興趣的文章
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10C語言 解決不用+、-、&#215;、&#247;數(shù)字運(yùn)算符做加法
- 01-10如何尋找數(shù)組中的第二大數(shù)
- 01-10深入線性時間復(fù)雜度求數(shù)組中第K大數(shù)的方法詳解
- 01-10數(shù)組中求第K大數(shù)的實現(xiàn)方法
- 01-10深入理解數(shù)組指針與指針數(shù)組的區(qū)別
- 01-10c語言字符數(shù)組與字符串的使用詳解
- 01-10解析sizeof, strlen, 指針以及數(shù)組作為函數(shù)參數(shù)的應(yīng)用
- 01-10c語言中用字符串?dāng)?shù)組顯示菜單的解決方法
- 01-10探討C++中數(shù)組名與指針的用法比較分析


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


