一个简单例子理解C语言指针

来源:互联网 发布:网络平台运行 编辑:程序博客网 时间:2024/06/05 08:35
  1. #include <stdio.h>
  2. intmain(){
  3. int a=100;
  4. int*p1 = &a;
  5. int**p2 = &p1;
  6. int***p3 = &p2;
  7. printf("%d, %d, %d, %d\n", a, *p1, **p2, ***p3);
  8. printf("&p2 = %#X, p3 = %#X\n",&p2, p3);
  9. printf("&p1 = %#X, p2 = %#X, *p3 = %#X\n",&p1, p2,*p3);
  10. printf(" &a = %#X, p1 = %#X, *p2 = %#X, **p3 = %#X\n",&a, p1,*p2,**p3);
  11. return0;
  12. }

  13. 运行结果:
100, 100, 100, 100&p2 = 0X28FF3C, p3 = 0X28FF3C&p1 = 0X28FF40, p2 = 0X28FF40, *p3 = 0X28FF40 &a = 0X28FF44, p1 = 0X28FF44, *p2 = 0X28FF44, **p3 = 0X28FF44
以三级指针 p3 为例来分析上面的代码。***p3等价于*(*(*p3))。*p3 得到的是 p2 的值,也即 p1 的地址;*(*p3) 得到的是 p1 的值,也即 a 的地址;经过三次“取值”操作后,*(*(*p3)) 得到的才是 a 的值。
假设 a、p1、p2、p3 的地址分别是 0X00A0、0X1000、0X2000、0X3000,它们之间的关系可以用下图来描述:

0 0
原创粉丝点击