欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法

 更新時間:2015年09月11日 18:58:24   投稿:goldensun  
這篇文章主要介紹了詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

C++數(shù)組的概念
概括地說:數(shù)組是有序數(shù)據(jù)的集合。要尋找一個數(shù)組中的某一個元素必須給出兩個要素,即數(shù)組名和下標(biāo)。數(shù)組名和下標(biāo)惟一地標(biāo)識一個數(shù)組中的一個元素。

數(shù)組是有類型屬性的。同一數(shù)組中的每一個元素都必須屬于同一數(shù)據(jù)類型。一個數(shù)組在內(nèi)存中占一片連續(xù)的存儲單元。如果有一個整型數(shù)組a,假設(shè)數(shù)組的起始地址為2000,則該數(shù)組在內(nèi)存中的存儲情況如圖所示。


引入數(shù)組就不需要在程序中定義大量的變量,大大減少程序中變量的數(shù)量,使程序精煉,而且數(shù)組含義清楚,使用方便,明確地反映了數(shù)據(jù)間的聯(lián)系。許多好的算法都與數(shù)組有關(guān)。熟練地利用數(shù)組,可以大大地提高編程和解題的效率,加強(qiáng)了程序的可讀性。

C++用方括號來表示下標(biāo),如用s[1],s[2],s[3] 分別代表s1,s2,s3。

C++用數(shù)組名作函數(shù)參數(shù)
常量和變量可以用作函數(shù)實(shí)參,同樣數(shù)組元素也可以作函數(shù)實(shí)參,其用法與變量相同。數(shù)組名也可以作實(shí)參和形參,傳遞的是數(shù)組的起始地址。
用數(shù)組元素作函數(shù)實(shí)參

由于實(shí)參可以是表達(dá)式,而數(shù)組元素可以是表達(dá)式的組成部分,因此數(shù)組元素當(dāng)然可以作為函數(shù)的實(shí)參,與用變量作實(shí)參一樣,將數(shù)組元素的值傳送給形參變量。

【例】用函數(shù)處理。

今設(shè)一函數(shù)max_value,用來進(jìn)行比較并返回結(jié)果??删帉懗绦蛉缦拢?br />

#include <iostream>
using namespace std;
int main( )
{
  int max_value(int x,int max); //函數(shù)聲明
  int i,j,row=0,colum=0,max
  int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}}; //數(shù)組初始化
  max=a[0][0];
  for (i=0;i<=2;i++)
   for (j=0;j<=3;j++)
   {
     max=max_value(a[i][j],max); //調(diào)用max_value函數(shù)
     if(max==a[i][j])//如果函數(shù)返回的是a[i][j]的值
     {
      row=i; //記下該元素行號i
      colum=j; //記下該元素列號j
     }
   }
  cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
}
int max_value(int x,int max)//定義max_value函數(shù)
{
  if(x>max) return x;//如果x>max,函數(shù)返回值為x
  else return max;//如果x≤max,函數(shù)返回值為max
}

用數(shù)組名作函數(shù)參數(shù)

可以用數(shù)組名作函數(shù)參數(shù),此時實(shí)參與形參都用數(shù)組名(也可以用指針變量,見第6章)。

【例】用選擇法對數(shù)組中10個整數(shù)按由小到大排序。

所謂選擇法就是先將10個數(shù)中最小的數(shù)與a[0]對換,再將a[1]到a[9]中最小的數(shù)與a[1]對換……每比較一輪,找出一個未經(jīng)排序的數(shù)中最小的一個。共比較9輪。根據(jù)此思路編寫程序如下:

#include <iostream>
using namespace std;
int main( )
{
  void select_sort(int array[],int n); //函數(shù)聲明
  int a[10],i;
  cout<<"enter the originl array:"<<endl;
  for(i=0;i<10;i++) //輸入10個數(shù)
   cin>>a[i];
  cout<<endl;
  select_sort(a,10);//函數(shù)調(diào)用,數(shù)組名作實(shí)參
  cout<<"the sorted array:"<<endl;
  for(i=0;i<10;i++) //輸出10個已排好序的數(shù)
   cout<<a[i]<<" ";
  cout<<endl;
  return 0;
}
void select_sort(int array[],int n) //形參array是數(shù)組名
{
  int i,j,k,t;
  for(i=0;i<n-1;i++)
  {
   k=i;
   for(j=i+1;j<n;j++)
     if(array[j]<array[k]) k=j;
   t=array[k];array[k]=array[i];array[i]=t;
  }
}

運(yùn)行情況如下:

enter the originl array:
6 9 -2 56 87 11 -54 3 0 77↙ //輸入10個數(shù)
the sorted array:
-54 -2 0 3 6 9 11 56 77 87

關(guān)于用數(shù)組名作函數(shù)參數(shù)有兩點(diǎn)要說明:
1) 如果函數(shù)實(shí)參是數(shù)組名,形參也應(yīng)為數(shù)組名(或指針變量),形參不能聲明為普通變量(如int array;)。實(shí)參數(shù)組與形參數(shù)組類型應(yīng)一致(現(xiàn)都為int型),如不一致,結(jié)果將出錯。

2) 需要特別說明的是: 數(shù)組名代表數(shù)組首元素的地址,并不代表數(shù)組中的全部元素。因此用數(shù)組名作函數(shù)實(shí)參時,不是把實(shí)參數(shù)組的值傳遞給形參,而只是將實(shí)參數(shù)組首元素的地址傳遞給形參。

形參可以是數(shù)組名,也可以是指針變量,它們用來接收實(shí)參傳來的地址。如果形參是數(shù)組名,它代表的是形參數(shù)組首元素的地址。在調(diào)用函數(shù)時,將實(shí)參數(shù)組首元素的地址傳遞給形參數(shù)組名。這樣,實(shí)參數(shù)組和形參數(shù)組就共占同一段內(nèi)存單元。見圖。


在用變量作函數(shù)參數(shù)時,只能將實(shí)參變量的值傳給形參變量,在調(diào)用函數(shù)過程中如果改變了形參的值,對實(shí)參沒有影響,即實(shí)參的值不因形參的值改變而改變。而用數(shù)組名作函數(shù)實(shí)參時,改變形參數(shù)組元素的值將同時改變實(shí)參數(shù)組元素的值。在程序設(shè)計中往往有意識地利用這一特點(diǎn)改變實(shí)參數(shù)組元素的值。

實(shí)際上,聲明形參數(shù)組并不意味著真正建立一個包含若干元素的數(shù)組,在調(diào)用函數(shù)時也不對它分配存儲單元,只是用array[]這樣的形式表示array是一維數(shù)組名,以接收實(shí)參傳來的地址。因此array[]中方括號內(nèi)的數(shù)值并無實(shí)際作用,編譯系統(tǒng)對一維數(shù)組方括號內(nèi)的內(nèi)容不予處理。形參一維數(shù)組的聲明中可以寫元素個數(shù),也可以不寫。

函數(shù)首部的下面幾種寫法都合法,作用相同:

  void select_sort(int array[10],int n) //指定元素個數(shù)與實(shí)參數(shù)組相同
  void select_sort(int array[],int n) //不指定元素個數(shù)
  void select_sort(int array[5],int n) //指定元素個數(shù)與實(shí)參數(shù)組不同

C++實(shí)際上只把形參數(shù)組名作為一個指針變量來處理,用來接收從實(shí)參傳過來的地址。前面提到的一些現(xiàn)象都是由此而產(chǎn)生的。
用多維數(shù)組名作函數(shù)參數(shù)

如果用二維數(shù)組名作為實(shí)參和形參,在對形參數(shù)組聲明時,必須指定第二維(即列)的大小,且應(yīng)與實(shí)參的第二維的大小相同。第一維的大小可以指定,也可以不指定。如:

  int array[3][10]; //形參數(shù)組的兩個維都指定


或 

  int array[][10]; //第一維大小省略


二者都合法而且等價。但是不能把第二維的大小省略。下面的形參數(shù)組寫法不合法:

  int array[][]; //不能確定數(shù)組的每一行有多少列元素
  int array[3][]; //不指定列數(shù)就無法確定數(shù)組的結(jié)構(gòu)


在第二維大小相同的前提下,形參數(shù)組的第一維可以與實(shí)參數(shù)組不同。例如,實(shí)參數(shù)組定義為:
    int score[5][10];
而形參數(shù)組可以聲明為:

  int array[3][10]; //列數(shù)與實(shí)參數(shù)組相同,行數(shù)不同
  int array[8][10];


這時形參二維數(shù)組與實(shí)參二維數(shù)組都是由相同類型和大小的一維數(shù)組組成的,實(shí)參數(shù)組名score代表其首元素(即第一行)的起始地址,系統(tǒng)不檢查第一維的大小。

如果是三維或更多維的數(shù)組,處理方法是類似的。

【例】有一個3×4的矩陣,求矩陣中所有元素中的最大值。要求用函數(shù)處理。

解此題的程序如下:

#include <iostream>
using namespace std;
int main( )
{
  int max_value(int array[][4]);
  int a[3][4]={{11,32,45,67},{22,44,66,88},{15,72,43,37}};
  cout<<"max value is "<<max_value(a)<<endl;
  return 0;
}
int max_value(int array[][4])
{
  int i,j,max;
  max=array[0][0];
  for( i=0;i<3;i++)
   for(j=0;j<4;j++)
     if(array[i][j]>max) max=array[i][j];
  return max;
}

運(yùn)行結(jié)果如下:

max value is 88

讀者可以將max_value函數(shù)的首部改為以下幾種情況,觀察編譯情況:

int max_value(int array[][])
int max_value(int array[3][])
int max_value(int array[3][4])
int max_value(int array[10][10])
int max_value(int array[12])

相關(guān)文章

  • Pipes實(shí)現(xiàn)LeetCode(194.轉(zhuǎn)置文件)

    Pipes實(shí)現(xiàn)LeetCode(194.轉(zhuǎn)置文件)

    這篇文章主要介紹了Pipes實(shí)現(xiàn)LeetCode(194.轉(zhuǎn)置文件),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言數(shù)據(jù)的存儲超詳細(xì)講解中篇練習(xí)

    C語言數(shù)據(jù)的存儲超詳細(xì)講解中篇練習(xí)

    使用編程語言進(jìn)行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-04-04
  • 帶你用C語言實(shí)現(xiàn)strtok和字符串分割函數(shù)

    帶你用C語言實(shí)現(xiàn)strtok和字符串分割函數(shù)

    下面小編就為大家?guī)硪黄猚語言中字符串分割函數(shù)及實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • 深入解析C++中派生類的構(gòu)造函數(shù)

    深入解析C++中派生類的構(gòu)造函數(shù)

    這篇文章主要介紹了深入解析C++中派生類的構(gòu)造函數(shù),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++中對象的常引用、動態(tài)建立和釋放相關(guān)知識講解

    C++中對象的常引用、動態(tài)建立和釋放相關(guān)知識講解

    這篇文章主要介紹了C++中對象的常引用、動態(tài)建立和釋放相關(guān)知識講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • c/c++?Error:?redefinition?of?'xxx'的問題及解決方法

    c/c++?Error:?redefinition?of?'xxx'的問題及解決方法

    兩個類/文件同時引用定義ReplyInfo的頭文件,會造成頭文件中定義重復(fù)定義,本文給大家分享c/c++?Error:?redefinition?of?‘xxx’?的問題及解決方法,感興趣的朋友一起看看吧
    2023-08-08
  • 如何理解C++ 臨時變量的常量性

    如何理解C++ 臨時變量的常量性

    這篇文章主要介紹了如何理解C++ 臨時變量的常量性,幫助大家更好的理解和學(xué)習(xí)c++ 變量,感興趣的朋友可以了解下
    2020-08-08
  • C++文件讀取的4種情況匯總

    C++文件讀取的4種情況匯總

    前幾天要用到C++讀取文本文件,就學(xué)習(xí)了一下幾種不同的讀取方法,下面這篇文章主要給大家介紹了關(guān)于C++文件讀取的4種情況,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • C++實(shí)踐數(shù)組類運(yùn)算的實(shí)現(xiàn)參考

    C++實(shí)踐數(shù)組類運(yùn)算的實(shí)現(xiàn)參考

    今天小編就為大家分享一篇關(guān)于C++實(shí)踐數(shù)組類運(yùn)算的實(shí)現(xiàn)參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言實(shí)現(xiàn)三子棋游戲(棋盤可變)

    C語言實(shí)現(xiàn)三子棋游戲(棋盤可變)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)三子棋游戲,棋盤可變,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論