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

首頁 > 編程 > C++ > 正文

C++函數的數組參數—向函數傳遞數組

2020-05-23 14:27:28
字體:
來源:轉載
供稿:網友
數組的存儲空間很大,如果能夠把它作為參數傳遞給函數,那么就能發揮很大的作用了。比如本來一個選出最大數的max函數只能在兩個數或三個數里面選出一個最大的數字,如果我們把數組傳遞過去,它就能夠在一堆數字中選出最大的數了,這大大提高了程序的效率。當函數中的某個參數是數組時,在參數名后加上一對中括號,比如int a[],表示參數a是一個數組。下面我們就來看這樣一個在一堆正數里面找一個最大數的程序:(程序7.3.1)
#include "iostream.h"
int max(int a[],int size);//size是數組的大小
int main()
{
   int number[]={2,45,12,6,23,98,13,3};
   cout <<max(number,sizeof(number)/sizeof(int)) <<endl;
   return 0;
}
int max(int a[],int size)
{
   int max=0;
   for (int i=0;i<size;i++)
   {
      if (a[i]>max)
      max=a[i];
   }
   return max;
}
運行結果:
98

我們發現,在函數里使用數組也是比較方便的。但大家有沒有考慮過一個問題,我們為什么不在函數里面用sizeof算出數組的大小,而非要在函數外面算好了,再作為參數傳遞給函數呢?在這里,我們就有必要講一下數組作為參數傳遞給函數的原理了。

我們以前說過,參數的傳遞是將實參的值賦給形參。然而對于數組來說卻是一個例外,因為數組的數據太多了,將其一一賦值既麻煩又浪費空間,所以數組作為參數傳遞給函數的只是數組首元素的地址,函數在需要用到后面元素時再按照這個地址和數組下標去查找。也就是說后面的元素根本沒到函數里來,所以在函數里求不出數組的大小也就不足為奇了。

所以,當一個函數的參數是一個數組時,我們必須注意要想辦法讓這個函數知道數組的大小。

不過,既然數組傳遞給函數的是數組首元素在內存中地址,而數據又都是存在內存里的,那么在函數中對數組參數的修改會不會影響到實參本身的值呢?讓我們來看一段程序,驗證一下我們的想法:(程序7.3.2)
#include "iostream.h"
#include "iomanip.h"
void sort(int a[],int size);//將數組中的元素從大到小排列
int main()
{
   int num[]={2,3,8,6,4,1,7,9};
   const int size=sizeof(num)/sizeof(int);
   sort(num,size);
   cout <<"排列后的數組元素" <<endl;
   for (int i=0;i<size;i++)//輸出排列好以后的數組元素
   {
      cout <<setw(2) <<num[i];
   }
   cout <<endl;
   return 0;
}
void sort(int a[],int size)
{
   cout <<"原來的數組元素" <<endl;
   for (int i=0;i<size;i++)//輸出原來的數組元素
   {
      cout <<setw(2) <<a[i];
   }
   cout <<endl;
   for (int j=0;j<size;j++)
   {
      int min=a[j],mink=j;//先假設未排序的首元素是最小的數
      for (int k=j;k<size;k++)//找到尚未排序的元素中最小的數
      {
C++函數的數組參數—向函數傳遞數組         if (a[k]<min)
         {
            min=a[k];
            mink=k;
         }
      }
      int temp=a[j];//交換兩個元素
      a[j]=a[mink];
      a[mink]=temp;
   }
}

運行結果:
原來的數組元素
2 3 8 6 4 1 7 9
排列后的數組元素
1 2 3 4 6 7 8 9

算法時間:排序(Sort)
排序是經常要使用到的一項功能。排序的算法也有多種。程序7.3.2所使用的排序方法稱為直接選擇排序,即在未排序的元素中選擇出最小的一個,與未排序的首元素交換,直到所有的元素都已經排序。(如右上表所示)以后大家還會在數據結構課程中學習到一些更高效的排序算法,如快速排序法,插入排序法等等。

我們交換了sort函數中參數數組a的順序,卻發現回到主函數以后,num數組的元素次序也發生了變化。正是因為我們在函數中將內存中的數據作了操作,所以影響到了實參。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 不卡av免费在线观看 | 欧美精品在线一区二区三区 | 国产精品久久久久久久久久 | 国产精品一区二区三 | 亚洲精品国产第一综合99久久 | av在线二区 | 最新日韩av| 欧洲视频一区二区三区 | 日韩中文字幕在线看 | 欧美日韩在线播放 | www.久久精品 | 99精品福利视频 | 国产视频成人 | 人操人人人 | 黄色av免费看| 国产精品久久久久久吹潮 | 国产精品免费av | 区一区二免费视频 | 国产精品久久九九 | 日韩成人精品视频在线观看 | 亚洲精品视频在线 | 青青草人人 | 一区二区三区视频 | 99久久99久久精品免费看蜜桃 | 成人午夜视频在线观看 | 黄色国产精品 | 一区二区三区亚洲 | 欧美久久精品 | 国产精品视频一区二区免费不卡 | 久久精品亚洲精品 | 久久精品日产第一区二区三区 | 91精品国产色综合久久不卡98口 | 久久久久久久久久国产 | 欧美日韩精品免费 | 97国产一区二区精品久久呦 | 国产男女免费完整视频 | 黄色在线观看网站 | 中文字幕高清在线 | 久久免费视频观看 | 国产成人午夜高潮毛片 | 久在线|