a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

關于數組做函數參數的問題集合匯總

2020-01-26 15:43:17
字體:
來源:轉載
供稿:網友

首先是數組元素作為函數的實參,這和直接用多個變量作為函數的實參在用法上沒有什么差別。

作為例子的代碼:

復制代碼 代碼如下:

#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;  
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 综合一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 日本黄色大片 | 嫩草网站入口 | 波多野结衣一区在线观看 | 一级a性色生活片久久毛片波多野 | 人人爱超碰 | a久久久久久 | 在线不卡二区 | 欧美国产高清 | 亚洲综合电影 | 亚洲成人精品在线 | 四虎884a | 伊人在线 | 欧美中文字幕在线 | 免费黄色成人 | 在线免费观看成人 | av在线官网 | 亚洲精品一区久久久久久 | 久久亚洲一区二区三区四区五区高 | 在线视频成人永久免费 | 欧美日韩国产精品成人 | 国产精品自产拍 | 日韩成人久久 | 国产看片网站 | 久在线视频| 日韩av免费 | 激情99| 日本黄色的视频 | 欧美日韩视频网站 | 97香蕉久久国产超碰青草软件 | 日韩成人在线观看视频 | 色橹橹欧美在线观看视频高清 | 亚洲欧美视频一区 | 欧美日韩国产综合视频 | 国产一区二区三区视频在线观看 | 三级黄视频在线观看 | 秋霞成人| 精品中文在线 | 久久久久久亚洲精品中文字幕 | 日韩美女中文字幕 |