Android JNIC语言Android-NDK/JNI

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 = 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 的地址

上一篇 下一篇

猜你喜欢

热点阅读