C语言中的二级指针(双指针)

二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。

下面讲解C中的二级指针的使用方法。

例如我们使用指针来交换两个整型变量的值。

错误代码如下:

一级指针

[cpp]
  1. #include <stdio.h>   
  2.   
  3. void swap(int *a,int *b)  
  4. {  
  5.         int *tmp=NULL;  
  6.         tmp=a;  
  7.         a=b;  
  8.         b=tmp;  
  9. }  
  10.   
  11. int main(int *argc,int **argv)  
  12. {  
  13.         int a=2;  
  14.         int b=3;  
  15.         printf("Before swap a=%d  b=%d\n",a,b);  
  16.         swap(&a,&b);  
  17.         printf("After swap a=%d  b=%d\n",a,b);  
  18.         return 0;  
  19. }  

输出的结构如下:

C语言中的二级指针(双指针)

结果分析:不论是数值还是指针,swap函数中的参数传递的是总是值,所以在上述函数中即使a和b的地址已参数传递给swap函数,而在函数内交换的是a和b的值(main函数中a的地址和b的地址),而交换完毕,函数相应的参数从栈中弹出,并不能返回给调用函数,所以该swap函数中的操作是徒劳。C语言中的二级指针(双指针)

所以,这是不妨使用二级指针

正确的代码:

[cpp]
  1. #include <stdio.h>   
  2.   
  3. void swap(int **a,int **b)  
  4. {  
  5.         int *tmp=NULL;  
  6.         tmp=*a;  
  7.         *a=*b;  
  8.         *b=tmp;  
  9. }  
  10.   
  11. int main(int *argc,int **argv)  
  12. {  
  13.         int a=2;  
  14.         int b=3;  
  15.         printf("Before swap a=%d  b=%d\n",a,b);  
  16.         swap(&a,&b);  
  17.         printf("After swap a=%d  b=%d\n",a,b);  
  18.         return 0;  
  19. }  

输出的结果如下:

C语言中的二级指针(双指针)

结果分析:本实例中使用了二级指针,main()函数中的a和b的操作数的地址传递给swap()函数,swap()函数的功能是交换操作数a和b地址的地址的取值,通过指针的指针才能达到改变指针的值的目的,即是操作数a和b的地址交换,输出a和b的值达到交换的目的。

总结:

1、当操作二维数组时传递参数

2、当想改变指针的值的时候

不妨考虑使用二维指针。