C++用指標變數作為函數的參數接受數組的值的問題詳細總結_C 語言

來源:互聯網
上載者:User
實參和形參的四種結合方式
實參 形參 執行個體
數組名 數組名 1.1
數組名 指標變數 1.2
指標變數 數組名 1.3
指標變數 指標變數 1.4

本文以輸入10個整數,然後對其進行排序,然後輸出的程式為例:

形參為數組名,實參是數組名

執行個體代碼1.1:

複製代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 void Sort(int a[],int n);
 int a[10],i;
 cout<<"Please input 10 interges: "<<endl;
 for(i=0;i<10;i++){
  cin>>a[i];
 }
 Sort(a,10);
 cout<<"Sorted order:";
 for(i=0;i<10;i++){
  cout<<a[i]<<" ";
 }
 cout<<endl;
 return 0;
}
void Sort(int a[], int n){
 int i,j,k,tool;
 for(i=0;i<n;i++){
  k=i;
  for(j=i;j<n;j++){
   if(a[j]<a[k])
   k=j;
  }
  tool=a[k];
  a[k]=a[i];
  a[i]=tool;
 }
}

形參中a[ ]中,可以不寫任何的數字,只需要表示這是一個數組即可。如果其中放數位話,可以放置任何一個正整數(不一定等於實參數組的大小,可以比實參中的數組大或者小)。

即:

複製代碼 代碼如下:

void Sort(int a[], int n )

也可以寫成
複製代碼 代碼如下:

void Sort(int a[2], int n)

或者
複製代碼 代碼如下:

void Sort(int a[12], int n)

實參是數組名,形參是指標變數
執行個體代碼1.2:
複製代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 void Sort(int a[],int n);
 int a[10],i;
 cout<<"Please input 10 interges: "<<endl;
 for(i=0;i<10;i++){
  cin>>a[i];
 }
 Sort(a,10);
 cout<<"Sorted order:";
 for(i=0;i<10;i++){
  cout<<a[i]<<" ";
 }
 cout<<endl;
 return 0;
}
void Sort(int *a, int n){
 int i,j,k,tool;
 for(i=0;i<n;i++){
  k=i;
  for(j=i;j<n;j++){
   if(a[j]<a[k])
   k=j;
  }
  tool=a[k];
  a[k]=a[i];
  a[i]=tool;
 }
}

在文章《C++一維數組和指標的關係總結》中,已經提到數組名實際上代表數組的首元素的地址也就是說a等價於&a[0]

在實參中,數組名代表數組中的第一個元素的地址,所以實參實際上只傳遞了數組的第一個元素的指標。因此,在形參中,只需要一個指標變數來接受傳遞過來的值即可。

實參是指標變數,形參是數組

執行個體代碼1.3:

複製代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 void Sort(int a[],int n);
 int a[10],i;
 cout<<"Please input 10 interges: "<<endl;
 for(i=0;i<10;i++){
  cin>>a[i];
 }
 Sort(&a[0],10);
 cout<<"Sorted order:";
 for(i=0;i<10;i++){
  cout<<a[i]<<" ";
 }
 cout<<endl;
 return 0;
}
void Sort(int a[], int n){
 int i,j,k,tool;
 for(i=0;i<n;i++){
  k=i;
  for(j=i;j<n;j++){
   if(a[j]<a[k])
   k=j;
  }
  tool=a[k];
  a[k]=a[i];
  a[i]=tool;
 }
}

跟上文分析的一致,通過&a[0]作為實參進行傳值,證明了數組名實際上代表數組的首元素的地址也就是說a等價於&a[0]

形參是指標變數,實參是指標變數

執行個體代碼1.4:

複製代碼 代碼如下:

#include<iostream>
using namespace std;
int main(){
 void Sort(int a[],int n);
 int a[10],i;
 cout<<"Please input 10 interges: "<<endl;
 for(i=0;i<10;i++){
  cin>>a[i];
 }
 Sort(&a[0],10);
 cout<<"Sorted order:";
 for(i=0;i<10;i++){
  cout<<a[i]<<" ";
 }
 cout<<endl;
 return 0;
}
void Sort(int *a, int n){
 int i,j,k,tool;
 for(i=0;i<n;i++){
  k=i;
  for(j=i;j<n;j++){
   if(a[j]<a[k])
   k=j;
  }
  tool=a[k];
  a[k]=a[i];
  a[i]=tool;
 }
}

這種方法是最直接了當的方法,實參和形參的傳遞的數值和接受的數值都是指標

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.