cznhzhh 2022-07-17 19:41 采纳率: 100%
浏览 66
已结题

关于如何理解指针变量的地址和存储的值的问题

**关于如何理解指针变量的地址和存储的值的问题

C语言程序代码:

//测试指针地址和指针的指针的地址
#include<stdio.h>
int main(void)
{
    //定义
    int i = 1, a[5] = {10,20,30,40,50};
    int *p1;
    int **p2;
    int *p3;
    int **p4;
    //指针初始化
    p1 = &i;
    p2 = &p1;

    //指针指向一个数时
    printf("p1存储的地址p1=%p,p1自身的地址p1=%p,p1指向的地址的值*p1=%d\n", p1,&p1,*p1);
    printf("p2存储的地址*p2=%p,p2自身的地址p2=%p,p2指向的地址指向的值**p2=%d\n",*p2,&p2,**p2);

    //指针指向一个数组时
    p3 = a;
    p4 = &p3;
    printf("p3存储的地址p3=%p,p3自身的地址p3=%p,p3指向的地址的值*p3=%d\n", p3, &p3, *p3);
    printf("p4存储的地址*p4=%p,p4自身的地址p4=%p,p4指向的地址指向的值**p4=%d\n", *p4, &p4, **p4);
}

运行结果:

img

问题点:
p2为指针的指针,p2应该存储p1自身的地址,即应该为: 0057FA68但根据运行结果,p2却存储了p1指向的地址0057FA90
p4类似
还望赐教,不胜感激!

  • 写回答

5条回答 默认 最新

  • bostonAlen 2022-07-17 22:22
    关注

    你是理解了的,但是输出的时候你输出了 &p2,你应该输出p2变量的地址,你应该直接输出p2,&p2是p2这个变量的地址了,这个地址需要你使用一个三级指针去指向它了。
    P2 = &P1;
    那意味着
    p2就是&p1
    *p2 就是p1
    **p2 就是 *p1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 7月17日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用