指针的引用(代替二级指针)

先来作一个测试

struct Teacher{

   char* name;

   int age;

};

void getTeacher(Teacher* p) {

         p->age = 60;

}

void main() {

   Teacher t1;

   t1.age = 1;

   Teacher* t = &t1;

   getTeacher(t);

   printf("%d",t->age);

   system("pause");

}

用上面的方案,将指针传入到一个方法,那个方法通过指针,是可以修改指针所指向的内容的!因此最后的输出为60,没有问题。

但我们在JNI开发中,常常会有一种情况,就是将没有赋值的一个指针,也就是空指针,传入了一个方法中。这是怎么回事?如下:

void getTeacher(Teacher **p) {

   Teacher *tmp = (Teacher*)malloc(sizeof(Teacher));

   tmp->age =320;

   *p = tmp;

}

void main() {

   Teacher *t = NULL;

   getTeacher(&t);

   printf("%d",t->age);

   system("pause");

}

在传入方法前,指针为空,然后把指针取地址,相当于一个二级指针,传到了方法,方法内生成了一个指针,然后将原指针赋值,最后输出320。 这是一种空指针的赋值方案。

也可以用指针的引用,来代替二级指针

//指针的引用,代替二级指针

//Teacher* &p = (Teacher * *p)

void getTeacher(Teacher* &p) {

   p = (Teacher*)malloc(sizeof(Teacher));

   p->age = 200;

}

void main() {

   Teacher *t = NULL;

   getTeacher(t);

   printf("%d",t->age);

   system("pause");

}

如上的用法,就是直接传了一个一级指针进去!其实参数是一级指针的引用!这样就完成了给指针赋值!很多库的用法都是这样完成的。最后输出200.

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

推荐阅读更多精彩内容

  • 1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧...
    金巴多阅读 1,804评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,470评论 3 44
  • C中的结构体,对应JAVA中的类的概念。也就是一些数据结构的集合,形成一种新的数据结构。 见一个例子 struct...
    贝克街的猫大哥呀阅读 782评论 0 0
  • 青山不饶 烈日当空 在赤裸的盛夏里 我在思念一颗挺拔的杨树 我想在醒来的第一眼见到你。 这样我就不会太过于悲伤。 ...
    中二少女王软软阅读 1,119评论 6 8