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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© smilejoke 中级黑马   /  2015-8-24 08:53  /  805 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code]int main(int argc, const char * argv[])
{
    int a = 3,b = 4,c = 5;
    int *p[3] = {&a,&b,&c};
    printf("%p\n",&p[0]);  
    printf("%p\n",p[0]);
    return 0;
}
为什么这两个地址不一样呢?谁知道啊,求助

4 个回复

倒序浏览
这个当然不一样了,p[0]是存储a的地址,&p[0]是存储p[0]这个地址的数据所在的地址。
回复 使用道具 举报
楼上说的对,你对P[0]取&符后,就是取P[0]他的地址
回复 使用道具 举报
你是我的小苹果 发表于 2015-8-24 09:17
这个当然不一样了,p[0]是存储a的地址,&p[0]是存储p[0]这个地址的数据所在的地址。 ...

我明白了,指针p的本质其实也是一个用来存放地址的变量,那么既然是变量总会有地址,采用&p打印出来的就是它自己的地址。我之前一直疑惑在对地址取地址符是要闹哪样,现在看来把p看做变量对待就讲的通了。
回复 使用道具 举报
这是一个指针数组,指针数组它也是个数组,只是这个数组中存的元素是指针类型的,所以数组中每个元素也都有它自己的地址。&p[0]指的就是这个数组第一个元素在内存中的地址,而p[0]指的就是第一个元素中所存放的指针,它其实就是a在内存中的地址。所以二者不一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马