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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#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的地址...为什么不一样呀.....

4 个回复

倒序浏览
我也想问这个问题呢,第二个不懂
回复 使用道具 举报
问题看了,求楼下大神解释
回复 使用道具 举报
新定义一个指针数组的话,系统也会给他新创建一个新的地址,&p【0】的话是取了你新定义指针数组元素的地址,也就是p【0】本身的地址,而p【0】是个指针,本身也有地址,它里面存的内容是a元素的地址,有点二级指针的意思。p【0】=&a,这是我认为的,不知道对不对
回复 使用道具 举报
1.首先,我非常同意楼上的看法,我觉得你说的完全对,但是我也想说说我的理解.
2.指针:是一个存放地址的变量,即然是变量,那么系统就会分配给一块空间给这个指针变量,那么分配的分间自然也有地址啰,所以 for循环遍历的是指针变量它本身的地址,而不是变量里面存的地址,所以呢存放的别人的地址和自身的地址是不一样的,over!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马