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

            換了個地址:http://www.cnblogs.com/vizhen/

             

            函數指針

                來自:百度百科

                函數指針是指向函數的指針變量。 因而“函數指針”本身首先應是指針變量,只不過該指針變量指向函數。這正如用指針變量可指向整型變量、字符型、數組一樣,這里是指向函數。如前所述,C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變量后,可用該指針變量調用函數,就如同用指針變量可引用其他類型變量一樣,在這些概念上是一致的。函數指針有兩個用途:調用函數和做函數的參數

             

              1. 函數指針聲明方法:

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

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

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

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

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

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

              注2:函數括號中的形參可有可無,視情況而定。

              下面的程序說明了函數指針調用函數的方法:

            #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是指向函數的指針變量,所以可把函數max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來調用該函數,實際上ptr和max都指向同一個入口地址,不同就是ptr是一個指針變量,不像函數名稱那樣是死的,它可以指向任何函數,就看你想怎么做了。在程序中把哪個函數的地址賦給它,它就指向哪個函數。而后用指針變量調用它,因此可以先后指向不同的函數。不過注意,指向函數的指針變量沒有++和--運算,用時要小心

            2.指針函數和函數指針的區別:

            1,這兩個概念都是簡稱,指針函數是指帶指針的函數,即本質是一個函數。我們知道函數都又有返回類型(如果不返回值,則為無值型),只不過指針函數返回類型是某一類型的指針。

              其定義格式如下所示:

              【返回類型標識符】【 *】【返回名稱】(形式參數表)

              { 函數體 }

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

            3.關于函數指針數組的定義

            關于函數指針數組的定義方法,有兩種:一種是標準的方法;一種是蒙騙法。

              第一種,標準方法:

              函數指針數組是一個其元素是函數指針的數組。那么也就是說,此數據結構是一個數組,且其元素是一個指向函數入口地址的指針。

              根據分析:首先說明是一個數組:數組名[]

              其次,要說明其元素的數據類型指針:*數組名[].

              再次,要明確這每一個數組元素是指向函數入口地址的指針:函數返回值類型 (*數組名[])().請注意,這里為什么要把“*數組名[]”用括號擴起來呢?因為圓括號和數組說明符的優先級是等同的,如果不用圓括號把指針數組說明表達式擴起來,根據圓括號和方括號的結合方向,那么 *數組名[]() 說明的是什么呢?是元素返回值類型為指針的函數數組。有這樣的函數數祖嗎?不知道。所以必須括起來,以保證數組的每一個元素是指針。

              第二種,蒙騙法:

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

              函數名相當于一個指向其函數入口指針常量。 那么既然函數名是一個指針常量,那么就可以對其進行一些相應的處理,如強制類型轉換

              那么我們就可以把這個地址放在一個整形指針數組中,然后作為函數指針調用即可。

              完整例子:

            #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 閱讀(238) 評論(0)  編輯 收藏 引用 所屬分類: C++

            導航

            統計

            公告

            coding是我的寂寞,我是誰的寂寞

            隨筆分類(40)

            隨筆檔案(48)

            搜索

            積分與排名

            最新評論

            評論排行榜

            久久A级毛片免费观看| 精品国产一区二区三区久久| 中文精品久久久久国产网址| 久久er热视频在这里精品| 国产午夜精品久久久久九九电影| 51久久夜色精品国产| 亚洲午夜福利精品久久| 久久精品99久久香蕉国产色戒| 91精品国产色综久久| 国内精品久久久久影院老司 | 久久水蜜桃亚洲av无码精品麻豆 | 国产69精品久久久久APP下载| 超级碰碰碰碰97久久久久| 久久不见久久见免费视频7| 久久国产视屏| 97热久久免费频精品99| 久久午夜无码鲁丝片秋霞| 91久久精品无码一区二区毛片| 久久九九久精品国产免费直播| 99久久www免费人成精品| 亚洲va久久久噜噜噜久久男同| 美女久久久久久| 国产精品久久影院| 少妇内射兰兰久久| 色播久久人人爽人人爽人人片AV| 久久这里只精品国产99热| 久久久国产打桩机| 久久中文字幕人妻熟av女| 国产呻吟久久久久久久92| 久久婷婷五月综合97色直播 | 狠狠综合久久综合88亚洲| 久久久久久国产精品无码下载| 国产激情久久久久影院老熟女 | 99久久精品国产高清一区二区| 欧美伊人久久大香线蕉综合| 热RE99久久精品国产66热| 91久久福利国产成人精品| 国内精品免费久久影院| 久久精品国产亚洲AV不卡| 久久精品国产只有精品66| 久久精品国产一区二区电影|