【发布时间】:2015-09-07 03:03:13
【问题描述】:
我有以下代码来自 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
我很困惑为什么 addr of array param 和 addr of ptr param 是一样的。至于我,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
这两个代码段有什么区别?
【问题讨论】: