黑马程序员技术交流社区
标题:
关于数组地址的一个疑问,一个数组pa,取首地址为pa,有没&pa
[打印本页]
作者:
tonysheng
时间:
2015-12-24 15:39
标题:
关于数组地址的一个疑问,一个数组pa,取首地址为pa,有没&pa
问题: (数组名)是首地址,那 (&数组名)得到的地址也相同 ,有(&数组名的写法吗)。
代码如下
nt main(int argc, const char * argv[]) {
int a = 3 , b = 4 ,c = 5;
int *pa[3] = {&a,&b,&c}; //创建指针数组,分别存放了abc得地址
// pa[0] = &a ,
printf("&a = %p\n",&a);
printf("&a = %p\n",pa[0]);
printf("----------------\n");
printf("pa = %p\n",pa);
printf("&pa = %p\n",&pa);
printf("&pa[0] = %p\n",&pa[0]);
//如何访问a的值
printf("*(&a),a = %d\n",*(&a));
printf("*(pa[0]),a = %d\n",*(pa[0]));
printf("**pa,a = %d\n",**pa);
printf("**(&pa),a = %d\n",**(&pa));
printf("**(&pa[0]),a = %d\n",**(&pa[0]));
return 0;
}
运行结果:
&a = 0x7fff5fbff76c
&a = 0x7fff5fbff76c
----------------
pa = 0x7fff5fbff780
&pa = 0x7fff5fbff780
&pa[0] = 0x7fff5fbff780
*(&a),a = 3
*(pa[0]),a = 3
问题点 :
按输出%p的地址来看 ,pa = &pa,&pa取到的也是指针数组的首地址,
那么*(&pa)应该等于*pa 都取到a的地址pa[0],但结果取到的是不一样的。
----
**pa,a = 3
**(&pa),a = 1606416236
-------
**(&pa[0]),a = 3
作者:
后知后觉4778
时间:
2015-12-24 17:58
你不能这样理解,pa 和 &pa地址值的确一样,但是两个代表不同的类型,pa是数组名,指向数组首元素地址,即指向的是元素,而&pa是指向数组的指针,指向整个数组,你试着让他们都加1然后在输出就知道了
作者:
1050498188
时间:
2015-12-24 19:58
支持支持支持支持
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2