指针和数组参数

来源:互联网 发布:六安2016消费数据图片 编辑:程序博客网 时间:2024/04/19 12:38

作为函数参数的数组名和指针是相等的。之所以要把传递给函数的数组参数转换为指针是出于效率的考虑。在c语言中,所有非数组形式的数据实参均以传值形式调用。然而,不过拷贝整个数组,无论在时间还是在内存上的开销都有可能非常大。而且绝大部分情况下,你其实并不需要整个数组的拷贝,你只想告诉函数在那一时刻对那个特定的数组元素感兴趣。

需要牢记的一点是数组名表示数组的第一个元素的地址,它是一个指针常量,所以不能被作为左值。在不能用左值的地方不能使用数组名。

数组初始化的问题:如果数组的长度比你提供的初始化的值的个数要多,剩余的几个元素会被自动设置为0.如果元素的类型是指针,那么它们会被初始化为NULL;如果元素类型是float,那么它们会被初始化为0.0。

下面是指针和数组作为参数的测试程序:

#include <stdio.h>#include <stdlib.h>char ga[]="abcdefghijklmn";void my_array_func(char ca[10]){printf("address of array param=%#x \n",&ca);printf("value of array param=%#x \n",ca);printf("address of ca[0]=%#x \n",&ca[0]);printf("address of ca[1]=%#x \n",&ca[1]);printf("++ca=%#x\n\n",++ca);}void my_point_func(char *pa){printf("address of ptr param=%#x \n",&pa);printf("value of point param=%#x \n",pa);printf("address of pa[0]=%#x \n",&pa[0]);printf("address of pa[1]=%#x \n",&pa[1]);printf("++pa=%#x \n",++pa);}int main(){printf("address of globle array=%#x \n",&ga);printf("value of globle array=%#x \n",ga);printf("address of ga[0]=%#x\n",&ga[0]);printf("address of ga[1]=%#x\n\n",&ga[1]);my_array_func(ga);my_point_func(ga);return 0;}
输出结果为:


下图就是上面输入的图表表示:



0 0
原创粉丝点击