學會用函數編程是開發大型程序的第一步。
合理使用函數,會使得程序的邏輯更加清楚,更加容易維護。
一維數組的用途非常廣,對其操作也非常多,能夠合理的將基本操作封裝成函數,無疑是大有裨益的。
本篇我們討論如何用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;
}
一維數組在內存中是連續存放的,因此函數參數採用起始地址和結束地址下一個位置兩個指針。
這樣限定了範圍,設計函數時就無需考慮數組大小問題。該問題由函數調用者負責處理。
因此具有通用性。