黑马程序员技术交流社区

标题: 里面的 变量 a,b,c,的地址 和指针数组里的元素&a,&b,&c的地址... [打印本页]

作者: 驴小叔    时间: 2015-9-5 23:56
标题: 里面的 变量 a,b,c,的地址 和指针数组里的元素&a,&b,&c的地址...
#include <stdio.h>
int main(){
    int a = 5, b = 7, c = 9;
    /*&a = 0x7fff50a61be8
     &b = 0x7fff50a61be4
     &c = 0x7fff50a61be0*/
    printf("&a = %p\n&b = %p\n&c = %p\n",&a,&b,&c);
    //一维指针数组 : 数组类型 *数组名[数组长度] =  数组 数组里面存放的是地址(指针)
    int *p[3] = {&a,&b,&c};
    //遍历指针数组的每个元素的地址
    for(int i = 0; i < 3;i++){
        printf("&p[%d] = %p\n",i,&p[i]);
        /* &p[0] = 0x7fff5a5abbf0
         &p[1] = 0x7fff5a5abbf8
         &p[2] = 0x7fff5a5abc00*/     }
    return 0;
}
里面的 变量 a,b,c,的地址 和指针数组里的元素&a,&b,&c的地址...为什么不一样呀.....
作者: 胥鹏飞    时间: 2015-9-6 00:32
我也想问这个问题呢,第二个不懂
作者: 小笼包    时间: 2015-9-6 10:37
问题看了,求楼下大神解释
作者: ZQG    时间: 2015-9-6 10:50
新定义一个指针数组的话,系统也会给他新创建一个新的地址,&p【0】的话是取了你新定义指针数组元素的地址,也就是p【0】本身的地址,而p【0】是个指针,本身也有地址,它里面存的内容是a元素的地址,有点二级指针的意思。p【0】=&a,这是我认为的,不知道对不对
作者: wulei1982516    时间: 2015-9-6 11:32
1.首先,我非常同意楼上的看法,我觉得你说的完全对,但是我也想说说我的理解.
2.指针:是一个存放地址的变量,即然是变量,那么系统就会分配给一块空间给这个指针变量,那么分配的分间自然也有地址啰,所以 for循环遍历的是指针变量它本身的地址,而不是变量里面存的地址,所以呢存放的别人的地址和自身的地址是不一样的,over!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2