A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题:  (数组名)是首地址,那 (&数组名)得到的地址也相同 ,有(&数组名的写法吗)。
代码如下
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

2 个回复

倒序浏览
你不能这样理解,pa 和 &pa地址值的确一样,但是两个代表不同的类型,pa是数组名,指向数组首元素地址,即指向的是元素,而&pa是指向数组的指针,指向整个数组,你试着让他们都加1然后在输出就知道了

评分

参与人数 1黑马币 +2 收起 理由
tonysheng + 2 很给力!

查看全部评分

回复 使用道具 举报
支持支持支持支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马