實參和形參的四種結合方式
實參 |
形參 |
執行個體 |
數組名 |
數組名 |
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;
}
}
這種方法是最直接了當的方法,實參和形參的傳遞的數值和接受的數值都是指標