1. 程式人生 > >陣列作為函式的引數

陣列作為函式的引數

如果函式的實參是陣列名,則形參肯定也為陣列名或者指標變數。且實引數組和形引數組型別必須一致。函式實參是陣列名,即是把陣列首元素的地址傳遞給形參。陣列名作函式實參時,改變形引數組元素的值將同時改變實引數組元素的值。

實際上,宣告形引數組並不意味著真正建立一個包含若干元素的陣列,在呼叫函式時也不對它分配儲存單元,只是用array[]這樣的形式表示array是一維陣列名,以接收實參傳來的地址。因此array[]中方括號內的數值並無實際作用,編譯系統對一維陣列方括號內的內容不予處理。形參一維陣列的宣告中可以寫元素個數,也可以不寫。

void BubbleSort(int num[])//升序排列
{
	for(int i = 0; i < N - 1;i++)
	{
		for(int j = i + 1; j < N ;j++)
		{
			if(num[i] > num[j])
			{
				int temp = num[i];
				num[i] = num[j];
				num[j] = temp;
 
 
			}
		}
	}
}

上面的寫法不能得知實引數組含有的元素大小,若要傳遞陣列的大小,可以在後面再添加個形參變數,表示陣列的個數。

void BubbleSort(int num[],int n)

下面這個三個函式宣告效果是一樣的

void fun1(char *a,int length);  //陣列名
void fun2(char a[],int length);  //陣列名
void fun3(char a[10],int length);   //資料名

fun3引數a[10]中的10有跟沒有都一樣的,編譯器都會忽略掉

多維陣列名作函式形參 如果用二維陣列名作為實參和形參,在對形引數組宣告時,必須指定第二維(即列)的大小,且應與實參的第二維的大小相同。第一維的大小可以指定,也可以不指定。如: int array[3][10];  //形引數組的兩個維都指定    

int array[][10];  //第一維大小省略  二者都合法而且等價,但是不能把第二維的大小省略。

下面的形引數組寫法不合法:

int array[][];  //不能確定陣列的每一行有多少列元素 int array[3][];  //不指定列數就無法確定陣列的結構

在第二維大小相同的前提下,形引數組的第一維可以與實引數組不同。例如,實引數組定義為:int score[5][10];

而形引數組可以宣告為:int array[3][10];   int array[8][10];  //列數與實引數組相同,行數不同 

形參宣告為int array[3][10];   int array[8][10];    int array[ ][10];這三種是等價的 形參二維陣列與實參二維陣列必須由相同型別和大小的一維陣列組成的,實引數組名score代表其首元素(即第一行)的起始地址,系統不檢查第一維的大小。