歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. }  

輸出的結構如下:


結果分析:不論是數值還是指針,swap函數中的參數傳遞的是總是值,所以在上述函數中即使a和b的地址已參數傳遞給swap函數,而在函數內交換的是a和b的值(main函數中a的地址和b的地址),而交換完畢,函數相應的參數從棧中彈出,並不能返回給調用函數,所以該swap函數中的操作是徒勞。

所以,這是不妨使用二級指針

正確的代碼:

[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. }  

輸出的結果如下:


結果分析:本實例中使用了二級指針,main()函數中的a和b的操作數的地址傳遞給swap()函數,swap()函數的功能是交換操作數a和b地址的地址的取值,通過指針的指針才能達到改變指針的值的目的,即是操作數a和b的地址交換,輸出a和b的值達到交換的目的。

總結:

1、當操作二維數組時傳遞參數

2、當想改變指針的值的時候

不妨考慮使用二維指針。

Copyright © Linux教程網 All Rights Reserved