国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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數組的元素次序也發生了變化。正是因為我們在函數中將內存中的數據作了操作,所以影響到了實參。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 察哈| 邵阳市| 凤山县| 泾源县| 安泽县| 贵港市| 永川市| 宜黄县| 花垣县| 靖远县| 金门县| 平山县| 密山市| 鸡东县| 西青区| 伊川县| 泗洪县| 苍南县| 星子县| 疏附县| 万山特区| 陆河县| 哈尔滨市| 浦东新区| 东兴市| 图木舒克市| 玛沁县| 芜湖县| 昭通市| 江华| 灵台县| 巴南区| 冕宁县| 哈巴河县| 普安县| 兴山县| 乌鲁木齐县| 响水县| 红安县| 兴安县| 合阳县|