C语言 二级指针理解

示例代码

#include <studio.h>
#include <studlib.h>
void function(int** p)
{
      int i = 3;
      printf("i 的地址为%#x\n",&i);
      *p = &i;
}

main()
{
      int mainp;
      function(&mainp);
      printf("主函数中获取 i 的地址为%#x\n",mainp);
      printf("主函数中获取 i 的值为%d\n",*mainp);
      system("pause");
}

执行过程

1、int mainp 分配了一块内存空间


mainp分配内存空间

从左到右依次是 mainp 的内存地址,mainp 的内存空间

2、接着把 mainp 的地址传递给 function() 函数中 p 的值空间

mainp 地址传递给 p

3、在 function() 函数中 int i = 3i 分配了块内存空间

i的内存分配

4、接着 *p = &ip 的值是 0xff22,那么 *p 的值是 mainp 的值空间

赋值过程

5、*p = &i 整个过程

*p = &i

5、main() 方法中 printf("主函数中获取 i 的地址为%#x\n",mainp); 打印的是 mainp 的值所以输出的是0x22ff24,但是 printf("主函数中获取 i 的值为%d\n",*mainp) 打印的值确是 -2 ,原因是在 C 语言中函数执行完,局部变量就销毁了。

总结

p 取的是 p 的值空间,*p 取的是 p 的值空间中指向的地址的值空间,&p 取的是 p 自身的地址。相当于上述 &i 取的是 i 的地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容