数组是C语言中一种重要的数据类型,是系统内存中一块连续的地址空间。数据类型非常广泛,char 、int、 long int、结构体等。使用非常方便,可以存储大量的相同类型的数据。
函数可以对数据处理,如果不使用全局变量,那么必须将需要处理的数据传递给函数,函数再将处理结果输出。数组和指针在数据传送方面功能非常强大。因为可以传递大量的数据。我们可以将数组的首地址和数组的长度传递给函数即可。
在C语言中数组的数组名就该数组的首地址,比如 char dat[12]={1,2,3,4,5,6,7,8,9,10,11,12}; dat就是数组的首地址。而下表索引相当于地址偏移量。C的数组类型不做上下越界的处理和警告。所以在使用一定要小心。这就是很多对数组处理的函数一般会要求传递数组的长度。
比如我们需要将dat数组打印出来。以下代码可以实现。
#include
void printCharArray(char *buf, unsigned char len)
{
unsigned char i;
for(i=0;i<len;i )<="" p="">
printf("%d ",*(buf ));
printf("\n");
}
int main(void)
{
char dat[12]={1,2,3,4,5,6,7,8,9,10,11,12};
printCharArray(dat, 12);
}
以上代码运行结果是:
通过buf接收数组的首地址,len接收数组的长度。
但是以上代码是不安全的,因为 printCharArray(char *buf, unsigned char len)是可以修改dat数组的内容。我们可以通过以下代码来实现。
#include
void printCharArray(char *buf, unsigned char len)
{
unsigned char i;
for(i=0;i<len;i )<="" p="">
{
printf("%d ",*buf);
*buf =10;
buf ;
}
printf("\n");
}
int main(void)
{
unsigned char i;
char dat[12]={1,2,3,4,5,6,7,8,9,10,11,12};
printCharArray(dat, 12);
for(i=0;i<12;i )
{
printf("%d ",dat[i]);
}
printf("\n");
}
以上代码运行结果:
第一行结果是 printCharArray(char *buf, unsigned char len)函数输出的,我们通过 *buf =10语句,
对每个数组元素加了10.在主函数在次打印时结果为第二行。如果不希望函数改变数组的元素的值,在设计函数的参数定义时使用const关键词。即将传递的变量声明为常量。常量在程序运行过程中史 不能改变的。
修改函数的参数:void printCharArray(const char *buf, unsigned char len)这时如果编译该代码,编译器会报出错误提示:error C2166: l-value specifies const object。所以该函数的的就不能修改buf中的数据的值。
这一点在数据安全方面应用非常广泛。通过以上代码我们可以看到,如果希望将整个数组的传递给函数,只需把函数的首地址和数组的长度信息传递给函数就可以了。