我有以下代码,来自Peter van der Linden的Expert C Programming - Deep C Secrets第9章。
char ga[] = "abcdefghijklm";
void my_array_func( char ca[10] )
{
printf(" addr of array param = %#x \n",&ca);
printf(" addr (ca[0]) = %#x \n",&(ca[0]));
}
void my_pointer_func( char *pa )
{
printf(" addr of ptr param = %#x \n",&pa);
printf(" addr (pa[0]) = %#x \n",&(pa[0]));
}
main()
{
printf(" addr of global array = %#x \n",&ga);
printf(" addr (ga[0]) = %#x \n",&(ga[0]));
my_array_func( ga );
my_pointer_func( ga );
}
输出结果如下:
addr of global array = 0x870f018
addr (ga[0]) = 0x870f018
addr of array param = 0x574f17c8
addr (ca[0]) = 0x870f018
addr of ptr param = 0x574f17c8
addr (pa[0]) = 0x870f018
我感到困惑的是为什么
数组参数的地址
和指针参数的地址
是相同的。对我来说,ca
和pa
是两个不同的指针,因此它们的地址应该是不同的。有人能帮忙解释一下吗?作为对比:
main ()
{
int a = 1;
int *p1 = &a;
int *p2 = &a;
printf("add of p1 = %#x \n", &p1);
printf("add of p2 = %#x \n", &p2);
}
将给出不同地址的结果:
addr of p1 = 0x50a687e0
addr of p2 = 0x50a687d8
这两段代码之间有什么区别?