指针与二级指针的理解
一、一句话理解什么是指针
指针存放的是数据变量的地址,目的是为了指向数据所在的位置。
二、理解二级指针
二级指针同样也是指向地址,只不过是指向某一个指针的地址。也就是指向指针的指针。所以以此类推,同样拥有三级指针和更高级的指针。
三、二级指针的作用是什么
在我看来,二级指针用的地方是在函数当中,当一个函数需要对所传进来的指针的本身进行操作的话,就需要使用到二级指针。这里面就涉及到了局部变量和作用域的一个概念。
四、代码演示
#include <stdio.h>
void change(int *p,int *q){
int temp = *p;
*p = *q;
*q = temp;
}
void change2(int **p,int **q){
int* temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int a=10,b=20;
int*p,*q;
p = &a;
q = &b;
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=10,p=6356636 *q=20,q=6356632
change(p,q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=20,p=6356636 *q=10,q=6356632
change2(&p,&q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=10,p=6356632 *q=20,q=6356636
return 0;
}
先创建两个指针
int a=10,b=20;
int *p,*q;
p = &a;
q = &b;
使用一级指针
void change(int *p,int *q){
int temp = *p;
*p = *q;
*q = temp;
}
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=10,p=6356636 *q=20,q=6356632
change(p,q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=20,p=6356636 *q=10,q=6356632
我们可以发现,使用一级指针我们可以做到指针所指向的内容进行交换,但是并不能做到对指针本身进行交换。这就会出现一个问题,我们学到的数据结构链式表里面,有时候需要用到指针,但是只是通过一级指针我们不能够做到将指针进行交换。
接下来我们再来看一下二级指针
void change2(int **p,int **q){
int* temp = *p;
*p = *q;
*q = temp;
}
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=10,p=6356636 *q=20,q=6356632
change(p,q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=20,p=6356636 *q=10,q=6356632
change2(&p,&q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
// *p=10,p=6356632 *q=20,q=6356636
在二级指针操作中,我们成功交换了一级指针,并且同样一级所指向的内容同样也进行了交换。这就可以让我们在进行数据结构中的链式存储中进行交换指针了。
以上是我对指针的理解。目前还在学习中,如有问题,请各位指出。