創建通用的一維數組處理函數

學會用函數編程是開發大型程序的第一步。

合理使用函數,會使得程序的邏輯更加清楚,更加容易維護。

一維數組的用途非常廣,對其操作也非常多,能夠合理的將基本操作封裝成函數,無疑是大有裨益的。

本篇我們討論如何用C語言寫通用的一維數組處理函數。

一、什麼是通用的一維數組處理函數

這裏是指,對於同一種類型,無論其大小是多少,都可以處理。

二、不通用的幾種形式

1、函數參數或者函數體中存在常數

#include<stdio.h>
void func(int a[3])
{
	int i;	
	for(i=0;i<3;i++) 
	{
		printf("%d ",a[i]);
	}

}
//////////////
int main(void)
{
	int a[]={1,2,3};
	func(a);
	return 0;
}

代碼 for(i=0;i<3;i++)  把數組的數據個數限定得死死的。如果數組大小不爲3,則該函數輸出結果是錯誤的。

2、即使用#define 語句也不方便

#include<stdio.h>
#define N 3
void func(int a[N])
{
	int i;	
	for(i=0;i<N;i++) 
	{
		printf("%d ",a[i]);
	}

}
//////////////
int main(void)
{
	int a[]={1,2,3};
	func(a);
	return 0;
}

雖然有了#define語句,但是使得函數void func(int a[N])對其產生了依賴,從而破壞了函數的封裝性。

三、通用的方式

#include<stdio.h>
void func(int *begin,int *end)
{//數據範圍是[begin,end) 
		
	for(;begin<end;begin++) 
	{
		printf("%d ",*begin);
	}

}
//////////////
int main(void)
{
	int a[]={1,2,3};
	func(a,a+sizeof(a)/sizeof(int));
	return 0;
}

一維數組在內存中是連續存放的,因此函數參數採用起始地址和結束地址下一個位置兩個指針。

這樣限定了範圍,設計函數時就無需考慮數組大小問題。該問題由函數調用者負責處理。

因此具有通用性。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章