在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;
}
![](http://hi.csdn.net/attachment/201112/6/0_1323152636yPPq.gif)
上面的运行结果,我们可以看到,数组的参数地址和数组参数的第一个元素的地址是不一样的;另外,全局的数组中,ga 和 &ga是一致的,说明在数组的解引用过程中,是直接用该值的。相反,在指针中,不论是数组参数,还是指针参数(在这种情况下,其实编译器都是作为指针来看待的),ca 和 &ca是不一致的,说明在使用ca进行解引用的过程中,比ga多了一步(pa的情况同ca一致)。