C 二级指针理解
2018-07-15 本文已影响6人
Loofer
示例代码
#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 = 3 给 i 分配了块内存空间
i的内存分配
4、接着 *p = &i ,p 的值是 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 的地址