黑马程序员技术交流社区

标题: 关于数组地址的一个疑问,一个数组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