《C语言 —— 指针的指针的实际应用场景》
1.指针的用处
int a=3; int *x = &a;
以上是一个指针的赋值,指针变量x作为变量a的索引。
2.指针的指针
首先要搞明白一个概念,指针也是一个变量,也会占用存储空间。通过我们*p指向的是一份普通类型的数据,例如int、double、char等,但也可以指向一份指针类型的数据,例如int *、double*、char*等。那么如果一个指针指向的是另一个指针,那么我们就称它为二级指针,或者指向指针的指针。
假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:
int a=100; int *p1=&a; int **p2=&p1;
3.指针的指针的应用场景
如果要在一个函数的参数中改变一个指针的值,就只能传这个指针的指针给这个函数。
int *p eg1: void f(int **pp) { *pp++; } int main(void) { f(&p); } eg2: void f(int *pp) { *pp++; } int main(void) { *pp++; }
以上例程想要在函数f中对p这个指针增量(是地址增量,而不是指针所指向内容+1)。那么只能用例程1中。
比较明显的一个作用,就是减少函数传参。不然还需要传一个*index,来指示函数调用后的内存偏移量,传**进去,函数调用后,指针就自动指向偏移后的地址了。