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

先来作一个测试

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.

你可能感兴趣的:(指针的引用(代替二级指针))