• <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>

            單鏈DNA

            換了個(gè)地址:http://www.cnblogs.com/vizhen/

             

            函數(shù)指針

                來(lái)自:百度百科

                函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過(guò)該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。如前所述,C在編譯時(shí),每一個(gè)函數(shù)都有一個(gè)入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂贰S辛酥赶蚝瘮?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類型變量一樣,在這些概念上是一致的。函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)

             

              1. 函數(shù)指針聲明方法:

            【數(shù)據(jù)類型】【*】【指針變量名】(形參列表);

              注1:“函數(shù)類型”說(shuō)明函數(shù)的返回類型,由于“()”的優(yōu)先級(jí)高于“*”,所以指針變量名外的括號(hào)必不可少,后面的“形參列表”表示指針變量指向的函數(shù)所帶的參數(shù)列表。例如:

                int func(int x); /* 聲明一個(gè)函數(shù) */

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

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

              賦值時(shí)函數(shù)func不帶括號(hào),也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過(guò)賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。

              注2:函數(shù)括號(hào)中的形參可有可無(wú),視情況而定。

              下面的程序說(shuō)明了函數(shù)指針調(diào)用函數(shù)的方法:

            #include <iostream>
            using namespace std;
            int max(int x,int y){return (x>y?x:y);}
            int main()
            {
                int (*ptr)(int,int );
                int a,b,c;
                ptr=max;
                cin>>a>>b;
                c=(*ptr)(a,b);
                cout<<c<<endl;
                return 0;
            }

                ptr是指向函數(shù)的指針變量,所以可把函數(shù)max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來(lái)調(diào)用該函數(shù),實(shí)際上ptr和max都指向同一個(gè)入口地址,不同就是ptr是一個(gè)指針變量,不像函數(shù)名稱那樣是死的,它可以指向任何函數(shù),就看你想怎么做了。在程序中把哪個(gè)函數(shù)的地址賦給它,它就指向哪個(gè)函數(shù)。而后用指針變量調(diào)用它,因此可以先后指向不同的函數(shù)。不過(guò)注意,指向函數(shù)的指針變量沒(méi)有++和--運(yùn)算,用時(shí)要小心

            2.指針函數(shù)和函數(shù)指針的區(qū)別:

            1,這兩個(gè)概念都是簡(jiǎn)稱,指針函數(shù)是指帶指針的函數(shù),即本質(zhì)是一個(gè)函數(shù)。我們知道函數(shù)都又有返回類型(如果不返回值,則為無(wú)值型),只不過(guò)指針函數(shù)返回類型是某一類型的指針。

              其定義格式如下所示:

              【返回類型標(biāo)識(shí)符】【 *】【返回名稱】(形式參數(shù)表)

              { 函數(shù)體 }

              返回類型可以是任何基本類型和復(fù)合類型。返回指針的函數(shù)的用途十分廣泛。事實(shí)上,每一個(gè)函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個(gè)入口地址,該地址相當(dāng)于一個(gè)指針。比如函數(shù)返回一個(gè)整型值,實(shí)際上也相當(dāng)于返回一個(gè)指針變量的值,不過(guò)這時(shí)的變量是函數(shù)本身而已,而整個(gè)函數(shù)相當(dāng)于一個(gè)“變量”。

            3.關(guān)于函數(shù)指針數(shù)組的定義

            關(guān)于函數(shù)指針數(shù)組的定義方法,有兩種:一種是標(biāo)準(zhǔn)的方法;一種是蒙騙法。

              第一種,標(biāo)準(zhǔn)方法:

              函數(shù)指針數(shù)組是一個(gè)其元素是函數(shù)指針的數(shù)組。那么也就是說(shuō),此數(shù)據(jù)結(jié)構(gòu)是一個(gè)數(shù)組,且其元素是一個(gè)指向函數(shù)入口地址的指針。

              根據(jù)分析:首先說(shuō)明是一個(gè)數(shù)組:數(shù)組名[]

              其次,要說(shuō)明其元素的數(shù)據(jù)類型指針:*數(shù)組名[].

              再次,要明確這每一個(gè)數(shù)組元素是指向函數(shù)入口地址的指針:函數(shù)返回值類型 (*數(shù)組名[])().請(qǐng)注意,這里為什么要把“*數(shù)組名[]”用括號(hào)擴(kuò)起來(lái)呢?因?yàn)閳A括號(hào)和數(shù)組說(shuō)明符的優(yōu)先級(jí)是等同的,如果不用圓括號(hào)把指針數(shù)組說(shuō)明表達(dá)式擴(kuò)起來(lái),根據(jù)圓括號(hào)和方括號(hào)的結(jié)合方向,那么 *數(shù)組名[]() 說(shuō)明的是什么呢?是元素返回值類型為指針的函數(shù)數(shù)組。有這樣的函數(shù)數(shù)祖嗎?不知道。所以必須括起來(lái),以保證數(shù)組的每一個(gè)元素是指針。

              第二種,蒙騙法:

              盡管函數(shù)不是變量,但它在內(nèi)存中仍有其物理地址,該地址能夠賦給指針變量。獲取函數(shù)地址的方法是:用不帶有括號(hào)和參數(shù)的函數(shù)名得到。

              函數(shù)名相當(dāng)于一個(gè)指向其函數(shù)入口指針常量。 那么既然函數(shù)名是一個(gè)指針常量,那么就可以對(duì)其進(jìn)行一些相應(yīng)的處理,如強(qiáng)制類型轉(zhuǎn)換

              那么我們就可以把這個(gè)地址放在一個(gè)整形指針數(shù)組中,然后作為函數(shù)指針調(diào)用即可。

              完整例子:

            #include <iostream>
            int add1(int a1,int b1);
            int add2(int a2,int b2);
            
            int main()
            {
                int numa1=1,numb1=2;
                int numa2=2,numb2=3;
                int (*op[2])(int a,int b);
                op[0]=add1;
                op[1]=add2;
                printf("%d ,%d\n",op[0](numa1,numb1),op[1](numa2,numb2));
            
                system("PAUSE");
                return 0;
            }
            
            int add1(int a1,int b1)
            {
                return a1+b1;
            }
            int add2(int a2,int b2)
            {
                return a2+b2;
            }
            

            posted on 2011-02-09 13:54 Geek.tan 閱讀(239) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            coding是我的寂寞,我是誰(shuí)的寂寞

            隨筆分類(40)

            隨筆檔案(48)

            搜索

            積分與排名

            最新評(píng)論

            評(píng)論排行榜

            人妻少妇久久中文字幕一区二区| 国产精品九九久久免费视频| 精品久久久久久无码人妻热| 国产高清国内精品福利99久久| 免费一级欧美大片久久网| 亚洲美日韩Av中文字幕无码久久久妻妇 | AV无码久久久久不卡蜜桃| 久久久久久狠狠丁香| 亚洲国产综合久久天堂| 97精品国产91久久久久久| 欧美麻豆久久久久久中文| 久久久久免费精品国产| 久久99精品国产99久久6| 婷婷久久香蕉五月综合加勒比| 99久久精品国产综合一区| 亚洲国产精品无码久久| 久久精品免费大片国产大片| 国内精品伊人久久久久av一坑| 久久激情五月丁香伊人| 久久精品成人免费网站| 亚洲国产精品无码久久久蜜芽| 久久夜色撩人精品国产| 久久99精品国产| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 97超级碰碰碰碰久久久久| 亚洲欧美日韩中文久久| 人妻丰满?V无码久久不卡| 久久亚洲国产精品一区二区| 亚洲va国产va天堂va久久| 亚洲人成无码久久电影网站| 国产亚洲精午夜久久久久久| 国产精品久久久久AV福利动漫| 一本色道久久99一综合| 国产精品99久久久精品无码| 日本欧美国产精品第一页久久| 看全色黄大色大片免费久久久| 国产亚洲精午夜久久久久久| 久久久久99精品成人片牛牛影视| 久久久国产精华液| 性做久久久久久久久老女人| 中文成人无码精品久久久不卡 |