C的日記-指標續

來源:互聯網
上載者:User

標籤:

【函數指標】

<1>什麼是函數指標
    int a,b,c;
    int max(int,int);
    int (*p)(int,int);    //定義指標函數,指標變數活取函數地址
    p=max;
    c=(*p)(a,b)
    函數指標就是函數的起始地址,我們可以使用一個指向函數的指標變數來儲存這個地址,當前的指標變數就指向這個函數。
    在第二行聲明一個函數,第三行聲明一個指向int類型的指標變數,而且這個指標變數後面[有對圓括弧],這個就是指向函數的指標變數,我們想下,如果是int *p(int,int)會是怎樣?由於(的優先順序高,所以就是先聲明了一個p(int,int)函數,這個函數返回的是指向整型變數的指標。
    第三句只是定義了一個指向函數的指標變數,並沒有說明是什麼函數,到了第四局把max函數首地址賦給指標變數才算是指定了函數。但此刻函數並沒有運行,直到第5句利用函數指標變數調用函數的時候才執行了相應的內容。
<2>函數指標作函數參數
   在Main函數中把函數入口地址傳遞給處理函數的形參(函數指標變數),把函數要處理的資料傳遞給對應的形參,在處理函數是根據要處理的函數地址(函數指標變數)和接收到的資料進行輸出。粗淺的理解為低耦合。

    #include <stdio.h>    void main(){        int max(int,int);        int min(int,int);        int add(int,int);        void fun(int x,int y,int(*p)(int,int));        int a=2,b=3,c;        printf("輸入1/2/3\n");        scanf("%d",&c);        if(c==1){            fun(a,b,max);        }        else if(c==2){            fun(a,b,min);        }        else if(c==3){            fun(a,b,add);        }    }    void fun(int x,int y,int(*p)(int,int)){        int result;        result=(*p)(x,y);        printf("%d\n",result);    }    int max(int x,int y){        int z;        if(x>y)z=x;        else z=y;        printf("Max is");        return z;    }    int min(int x,int y){        int z;        if(x>y)z=y;        else z=x;        printf("Min is");        return z;    }    int add(int x,int y){        int z;        z=x+y;        printf("Sum is");        return z;    }
View Code

 

【返回指標的函數】
如:int *a(int x,int y);        //定義函數a,返回一個指向整形資料的指標
【指標數組】
如:int *a[5];    //定義指標數組,數組中的每一個元素都是指標變數
    由於[]的優先順序比較高,先計算a[5]說明它是數組形式,前面加上×表示它是指標數組。
    註:int *a[5]和int (*a)[5]的區別
        後面這中形式表示指向一維數組(這個數組最大編號為5)的指標變數。
指標數組的應用:大多用來指向若干個字串,如:
    char *name[]={"Fello me","Basic","Frotran","Computer class"};
    其中數組中存放的是各個字串的首字元的地址,這麼做的好處是節省空間的,而且指標可以改變。如果用二維數組儲存這些字串,那麼第一點數組的長度必須超過最長字串的長度,這就造成了空間浪費;第二,數組移動字串要比改變指標變數地址麻煩的多。


【指向指標資料的指標】
如:char **p; char c=‘a‘;
    *p=&c;    //
在定義時,char **P是二級指標,而在使用的時候,**p是指二級指標,存放的是一級指標變數的地址,*p是一級指標,存放的是變數的地址,p是‘a‘即變數的值;

C的日記-指標續

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.