歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中的二級指針(雙指針)

C語言中的二級指針(雙指針)

日期:2017/3/1 10:35:47   编辑:Linux編程

二級指針又叫雙指針。C語言中不存在引用,所以當你試圖改變一個指針的值的時候必須使用二級指針。C++中可以使用引用類型來實現。

下面講解C中的二級指針的使用方法。

例如我們使用指針來交換兩個整型變量的值。

錯誤代碼如下:

一級指針

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

輸出的結構如下:


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

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

正確的代碼:

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

輸出的結果如下:


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

總結:

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

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

不妨考慮使用二維指針。

Copyright © Linux教程網 All Rights Reserved