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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改