学会用函数编程是开发大型程序的第一步。
合理使用函数,会使得程序的逻辑更加清楚,更加容易维护。
一维数组的用途非常广,对其操作也非常多,能够合理的将基本操作封装成函数,无疑是大有裨益的。
本篇我们讨论如何用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;
}
一维数组在内存中是连续存放的,因此函数参数采用起始地址和结束地址下一个位置两个指针。
这样限定了范围,设计函数时就无需考虑数组大小问题。该问题由函数调用者负责处理。
因此具有通用性。