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

來源:互聯網
上載者:User

原創作品,轉載請標明出處 http://blog.csdn.net/yming0221/article/details/7220688 C語言更多查看 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;}


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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.