1. 程式人生 > >C++用指標變數作為函式的引數接受陣列的值的問題的總結

C++用指標變數作為函式的引數接受陣列的值的問題的總結

實參和形參的四種結合方式
實參 形參 例項
陣列名 陣列名 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;
	}
}
在文章《》中,已經提到陣列名實際上代表陣列的首元素的地址也就是說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;
	}
}

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