• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0

            【函數指針】

                   在程序運行中,函數代碼是程序的算法指令部分,它們和數組一樣也占用存儲空間,都有相應的地址。可以使用指針變量指向數組的首地址,也可以使用指針變量指向函數代碼的首地址,指向函數代碼首地址的指針變量稱為函數指針。

            1.函數指針定義

            函數類型 (*指針變量名)(形參列表);

            “函數類型”說明函數的返回類型,由于“()”的優先級高于“*”,所以指針變量名外的括號必不可少,后面的“形參列表”表示指針變量指向的函數所帶的參數列表。

            例如:

            int (*f)(int x);

            double (*ptr)(double x);

            在定義函數指針時請注意:
                
            函數指針和它指向的函數的參數個數和類型都應該是—致的;

            函數指針的類型和函數的返回值類型也必須是一致的。

            2.函數指針的賦值

            函數名和數組名一樣代表了函數代碼的首地址,因此在賦值時,直接將函數指針指向函數名就行了。

            例如,

            int func(int x);   /* 聲明一個函數 */

            int (*f) (int x);    /* 聲明一個函數指針 */

            f=func;            /* 將func函數的首地址賦給指針f */

            賦值時函數func不帶括號,也不帶參數,由于func代表函數的首地址,因此經過賦值以后,指針f就指向函數func(x)的代碼的首地址。

            3.通過函數指針調用函數

            函數指針是通過函數名及有關參數進行調用的。

            與其他指針變量相類似,如果指針變量pi是指向某整型變量i的指針,則*p等于它所指的變量i;如果pf是指向某浮點型變量f的指針,則*pf就等價于它所指的變量f。同樣地,*f是指向函數func(x)的指針,則*f就代表它所指向的函數func。所以在執行了f=func;之后,(*f)和func代表同一函數。

            由于函數指針指向存儲區中的某個函數,因此可以通過函數指針調用相應的函數。現在我們就討論如何用函數指針調用函數,它應執行下面三步:

            首先,要說明函數指針變量。

            例如:int (*f)(int x);

            其次,要對函數指針變量賦值。

            例如: f=func;    (func(x)必須先要有定義)

            最后,要用 (*指針變量)(參數表);調用函數。

            例如:    (*f)(x);(x必須先賦值)


            【例】任意輸入n個數,找出其中最大數,并且輸出最大數值。

            main()

            {

                    int f();

                    int i,a,b;

                    int (*p)();    /* 定義函數指針 */

                    scanf("%d",&a);

                    p=f;            /* 給函數指針p賦值,使它指向函數f */

                    for(i=1;i<9;i++)

                    {
                            scanf("%d",&b);

                            a=(*p)(a,b);    /* 通過指針p調用函數f */

                    }

                    printf("The Max Number is:%d",a)

            }


            f(int x,int y)

            {

                int z;

                z=(x>y)?x:y;

                return(z);

            }

            運行結果為:

            343 -45 4389 4235 1 -534 988 555 789↙

            The Max Number is:4389


            【指針函數】

            一個函數不僅可以帶回一個整型數據的值,字符類型值和實型類型的值,還可以帶回指針類型的數據,使其指向某個地址單元。

                    返回指針的函數,一般定義格式為:

                    類型標識符    *函數名(參數表)

            int *f(x,y);

            其中x,y是形式參數,f是函數名,調用后返回一個指向整型數據的地址指針。f(x,y)是函數,其值是指針。

            如:char *ch();表示的就是一個返回字符型指針的函數,請看下面的例題:

            【例】將字符串1(str1)復制到字符串2(str2),并輸出字符串2.

            #include "stdio.h"

            main()

            {

                char *ch(char *,char *);

                char str1[]="I am glad to meet you!";

                char str2[]="Welcom to study C!";

                printf("%s",ch(str1,str2));

            }

            char *ch(char *str1,char *str2)

            {

                int i;

                char *p;

                p=str2
                
                if(*str2==NULL) exit(-1);

                do

                {

                    *str2=*str1;

                    str1++;

                    str2++;

                }while(*str1!=NULL);

                return(p);

            }


            通過分析可得

            函數指針是一個指向函數的指針,而指針函數只是說明他是一個返回值為指針的函數,

            函數指針可以用來指向一個函數。


            本文引用通告地址:http://lionwq.spaces.eepw.com.cn/articles/trackback/item/18258
            from:
            posted on 2010-08-18 22:20 chatler 閱讀(306) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久无码AV一区二区三区| 久久国产亚洲精品无码| 漂亮人妻被中出中文字幕久久| 久久精品国产亚洲精品2020 | 久久福利资源国产精品999| 久久久亚洲精品蜜桃臀| 久久久久亚洲精品日久生情 | 久久天天婷婷五月俺也去| 久久精品国产亚洲AV忘忧草18| 国产精品va久久久久久久| 7777精品伊人久久久大香线蕉| 久久亚洲精品视频| 久久久久久伊人高潮影院 | 久久精品中文闷骚内射| 精品欧美一区二区三区久久久| 久久综合狠狠综合久久综合88| 久久99精品久久久久久水蜜桃| 亚洲精品无码久久千人斩| 精品人妻伦九区久久AAA片69| 91久久婷婷国产综合精品青草| 久久九九久精品国产免费直播| 国産精品久久久久久久| 色综合久久无码中文字幕| 久久人人爽人人人人爽AV | 久久国产亚洲精品| 亚洲国产成人久久综合碰碰动漫3d| 色欲综合久久躁天天躁蜜桃| 亚洲精品成人网久久久久久| 国产日韩久久免费影院| 日本一区精品久久久久影院| 欧洲人妻丰满av无码久久不卡| 亚洲中文久久精品无码ww16| 国产精品gz久久久| 潮喷大喷水系列无码久久精品| 久久精品a亚洲国产v高清不卡| 免费无码国产欧美久久18| 国产精品青草久久久久福利99 | 伊人久久大香线焦综合四虎| 丰满少妇高潮惨叫久久久| 久久精品国产秦先生| 久久精品国产第一区二区三区|