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 的值空间
3、在 function()
函数中 int i = 3
给 i
分配了块内存空间
4、接着 *p = &i
,p
的值是 0xff22,那么 *p
的值是 mainp
的值空间
5、*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
的地址