1. 程式人生 > >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;
}


當想改變指標的值的時候不妨考慮使用二維指標。