c语言中的数组与指针

来源:互联网 发布:sql 查询字段长度 编辑:程序博客网 时间:2024/05/16 14:46

在c语言中,只有在函数定义的形式参数中,数组和指针是一致的。下面一段是c expert中的代码,我另外又加了一些。

char ga[] = "abcdefghijklm";void my_array_func(char ca[10]){printf(" value of ca = %#x \n", ca);printf(" addr of array param = %#x \n", &ca);printf(" addr (ca[0]) = %#x \n", &(ca[0]));printf(" addr (ca[1]) = %#x \n", &(ca[1]));printf(" ++ca = %#x \n\n", ++ca);}void my_pointer_func(char* pa){printf(" value of pa = %#x \n", pa);printf(" addr of ptr param = %#x \n", &pa);printf(" addr (pa[0]) = %#x \n", &(pa[0]));printf(" addr (pa[1]) = %#x \n", &(pa[1]));printf(" ++pa = %#x \n\n", ++pa);}int main(){printf(" value of ga = %#x \n", ga);printf(" addr of global array = %#x \n", &ga);printf(" addr (ga[0]) = %#x \n", &(ga[0]));printf(" addr (ga[1]) = %#x \n\n", &(ga[1]));my_array_func(ga);my_pointer_func(ga);return 0;}

上面的运行结果,我们可以看到,数组的参数地址和数组参数的第一个元素的地址是不一样的;另外,全局的数组中,ga 和 &ga是一致的,说明在数组的解引用过程中,是直接用该值的。相反,在指针中,不论是数组参数,还是指针参数(在这种情况下,其实编译器都是作为指针来看待的),ca 和 &ca是不一致的,说明在使用ca进行解引用的过程中,比ga多了一步(pa的情况同ca一致)。


原创粉丝点击