原創作品,轉載請標明出處http://blog.csdn.net/yming0221/article/details/7220688C語言更多查看C語言使用注意事項(一)C語言使用注意事項(二)C語言使用注意事項(三)
二級指標又叫雙指標。C語言中不存在引用,所以當你試圖改變一個指標的值的時候必須使用二級指標。C++中可以使用參考型別來實現。
下面講解C中的二級指標的使用方法。
例如我們使用指標來交換兩個整型變數的值。
錯誤碼如下:
一級指標
#include <stdio.h>void swap(int *a,int *b){ int *tmp=NULL; tmp=a; a=b; b=tmp;}int main(int argc,char **argv){ int a=2; int b=3; printf("Before swap a=%d b=%d\n",a,b); swap(&a,&b); printf("After swap a=%d b=%d\n",a,b); return 0;}
輸出的結構如下:
結果分析:不論是數值還是指標,swap函數中的參數傳遞的是總是值,所以在上述函數中即使a和b的地址已參數傳遞給swap函數,而在函數內交換的是a和b的值(main函數中a的地址和b的地址),而交換完畢,函數相應的參數從棧中彈出,並不能返回給調用函數,所以該swap函數中的操作是徒勞。
這裡完全可以直接交換a和b的值,不過如果a和b不是一個32位的整型變數,而是一個複雜的資料結構,這樣做會降低效率。如下;
void swap(TYPE *a,TYPE *b){ TYPE tmp; tmp=*a; *a=*b; *b=tmp;}
二級指標
下面是使用二級指標分配記憶體的例子
#include <stdio.h>#include <stdlib.h>#include <string.h>void memorylocate(char **ptr){ *ptr=(char *)malloc(10*sizeof(char));}int main(int argc,char **argv){ char *buffer; memorylocate(&buffer); strcpy(buffer,"12345"); printf("buffer %s\n",buffer); return 0;}
當想改變指標的值的時候不妨考慮使用二維指標。