青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

We do not always find visible happiness in proportion to visible virtue

夢幻白樺林

SHARE

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  14 Posts :: 58 Stories :: 62 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(5)

搜索

  •  

最新隨筆

最新評論

閱讀排行榜

函數指針

      一個函數在編譯時被分配一個入口地址,將這個入口地址稱為函數的指針,可

      以用一個指針變量指向該函數指針,然后通過該變量來調用函數。

      有關說明:

      1、函數指針的聲明格式:

        函數返回值類型(*指針變量名)(參數類型列表)

         或者是:

         typedef 函數返回值類型?。ǎ羔樧兞棵▍殿愋土斜恚?span lang="EN-US">

            2、一個函數指針只能指向一種類型的函數,即具有相同的返回值和相同的參            

        數的函數

     ?。?、關于函數指針的加減運算沒有意義

       函數指針數組定義:

             函數定義:

             void fun1(void *p);

             void fun2(void *p);

             void fun3(void *p);

       函數指針數組定義:

       void(*fun[3])(void*);//typedef void(*pfun)(void*);pfun fun[3];

       指針賦值:

             fun[0] = fun1;

             fun[1] = fun2;

             fun[2] = fun3;

             函數調用:

       fun[0](&a);         //int a;

             fun[1](&b);         //int b;

             fun[3](&c);         //int c;

          聲明一個指向成員函數的指針

一個指向成員函數的指針包括成員函數的返回類型,帶::符號的類名稱,函數參數表。雖然這一語法看似復雜,其實它和普通的指針是一樣的。指向外部函數的指針可如下聲明:

void (*pf)(char *, const char *);
void strcpy(char * dest, const char * source);
pf=strcpy;

相應指向類A的成員函數的指針如下表示:

void (A::*pmf)(char *, const char *);

以上pmf是指向類A的一個成員函數的指針,傳遞兩個變量char *const char *,沒有返回值。注意星號前面的A::符號,這和前面的聲明是一致的。

賦值
為了給一個指向成員函數的指針賦值,可以采用成員函數名并再其前面加一個&的方式
使用typedef

你可以使用typedef來隱藏一些指向成員函數的復雜指針。例如,下面的代碼定義了一個類A中的成員函數的指針PMA,并傳遞char *const char *參數。

typedef void(A::*PMA)(char *, const char *);
PMA pmf= &A::strcat; // use a typedef to define a pointer to member

使用typedef特別有用,尤其是對于指向成員函數的數組指針。

       void類型的指針

void含義:

void是“無類型”,void*則為無類型指針,void*可以指向任何類型的數據。

void a;//此變量沒有任何實際意義,無法編譯通過“illegal use of type

void 的作用:

     1、對程序返回的限定

     2、對函數參數的限定

我們知道,如何指針p1p2的類型相同,那么我們可以直接在p1p2間賦值,如果不同,必須使用強制類型轉換。

如:float *p1;   int *p2;

若:p1 = p2; 編譯出錯:“can not covert from int* to float*

必須為:p1 = (float*)p2;

            void*不同,任何類型的指針都可以直接賦為它,不需要強制類型轉換:

            如:void *p1;   int *p2;

                可作:p1 =p2;

                無類型可以包容有類型,有類型不能包容無類型:

                必須為:p2 = (int*)p1;

            viod void*使用規則總結:

     如果函數沒有返回值,那么應聲明為void類型

C語言中,凡不加返回值類型限定的函數,就會被編譯器作為返回整型值處理。但是許多程序員卻誤以為其為void類型. 林銳博士《高質量C/C++編程》中提到:“C++語言有很嚴格的類型安全檢查,不允許上述情況(指函數不加類型聲明)發生。可是編譯器并不一定這么認定,譬如在Visual C++6.0中上述add函數的編譯無錯也無警告且運行正確,所以不能寄希望于編譯器會做嚴格的類型檢查。

因此,為了避免混亂,我們在編寫C/C++程序時,對于任何函數都必須一個不漏地指定其類型。如果函數沒有返回值,一定要聲明為void類型。這既是程序良好可讀性的需要,也是編程規范性的要求。另外,加上void類型聲明后,也可以發揮代碼的自注釋作用。代碼的自注釋即代碼能自己注釋自己。

             如果函數無參數,那么應聲明其參數為void

             小心使用void指針類型

                按照ANSI的標準,不能對void指針進行算法操作,即下列操作是不合法的:

                void *pvoid;

                pvoid ++;         //ansi錯誤

                pvoid += 1;        //ansi 錯誤

                ansi標準之所以這樣認定,是因為它堅持,進行算法操作的指針必須是確定知道其指向數據類型的大小的。

                GUNGUNs  Not  Unix)則不這么認為,它指定void*的算法操作與char*一致。因此在GUN編譯器中上述語句是正確的。

                在實際的程序中,為了迎合ansi標準,并提高程序的可移植性,我們可以這樣實現同樣功能的代碼:

                void *pvoid;

                (char*)pvoid++;

                (char*)pvoid += 1;

             如果函數的參數可以是任意類型指針,那么應聲明其參數為void *

                典型的如內存操作函數memcpymemset的函數原型分別為:

                void* memcpy(void *dest, const void *src, size_t len);

                void* memset(void *buffer,int c, size_t num);

                這樣,任何類型的指針都可以傳入memcpymemset中,這也真實地體現了內存操作函數的意義,因為它操作的對象僅僅是一片內存,而不論內存是什類型。

             void不能代表一個真實的變量

                void a; //錯誤

                function(void a); //錯誤

       this指針

《深入淺出MFC》中解釋:

 定義類CRect,定義兩個對象rect1、rect2,各有自己的m_color成員變量,但rect1.setcolorrect2.setcolor卻都是通往唯一的CRect::setcolor成員函數,那么CRect::setcolor如何處理不同對象的m_color?答案是由一個隱藏參數,名為this指針。當你調用:

rect1.setcolro(2);

rect2.setcolor(3);

時,編譯器實際上為你做出來一下的代碼:

CRect::setcolor(2,(CRect*)&rect1);

CRect::setcolor(3,(CRect*)&rect2);

多出來的參數,就是所謂的this指針。

class CRect

{

……

public:

  void setcolor(int color){m_color = color};

};

被編譯后,其實為:

class CRect

{

……

public:

  void setcolor(int color,(CRect*)this){this->m_color = color};

};

posted on 2007-06-03 15:07 colys 閱讀(1041) 評論(0)  編輯 收藏 引用 所屬分類: C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            狠狠久久综合婷婷不卡| 国内精品久久久久久| 一级成人国产| 日韩亚洲国产精品| 国产精品久久综合| 久久av资源网站| 久久精品亚洲一区| 91久久精品国产91久久性色| 亚洲国产日韩欧美在线99| 欧美www在线| 日韩一级精品| 亚洲一区日韩在线| 国产在线麻豆精品观看| 欧美激情导航| 国产精品爱啪在线线免费观看| 欧美亚洲免费在线| 久久久久一区| 亚洲一区二区三区午夜| 欧美一区二区视频在线| 亚洲精品久久久久| 亚洲一区二区伦理| 亚洲第一主播视频| 9色porny自拍视频一区二区| 国产亚洲精久久久久久| 亚洲第一偷拍| 国产精品理论片在线观看| 久久色在线播放| 欧美日韩伊人| 欧美成人激情在线| 国产精品午夜久久| 亚洲欧洲精品成人久久奇米网| 欧美午夜在线| 欧美成人在线免费视频| 国产精品一区二区黑丝| 亚洲高清二区| 国产亚洲精品高潮| 99精品视频免费在线观看| 精品动漫一区| 亚洲一区三区视频在线观看| 亚洲乱码精品一二三四区日韩在线| 亚洲午夜国产成人av电影男同| 在线精品亚洲| 欧美一区二区日韩一区二区| 99国产成+人+综合+亚洲欧美| 欧美专区在线| 午夜久久一区| 欧美视频亚洲视频| 亚洲黄色尤物视频| 亚洲东热激情| 久久久国际精品| 午夜精品99久久免费| 欧美人与禽猛交乱配| 欧美www在线| 国内精品久久久久久久果冻传媒 | 国产综合久久久久久| 亚洲精品影院在线观看| 亚洲福利视频专区| 久久久久.com| 久久日韩粉嫩一区二区三区| 国产午夜精品一区二区三区欧美| 亚洲毛片视频| 亚洲天堂男人| 国产精品美女久久久久久2018| 亚洲美女视频网| 99精品国产在热久久下载| 免费一级欧美片在线播放| 免费日韩精品中文字幕视频在线| 国产主播一区二区三区四区| 午夜精品久久久久久久久久久久 | 狠狠久久亚洲欧美| 欧美中文字幕在线观看| 久久免费视频在线| 国产一区二区三区久久悠悠色av| 欧美夜福利tv在线| 久久综合久久综合久久| 亚洲国产精品久久久久久女王| 久久久久久久999精品视频| 美女图片一区二区| 亚洲国产三级网| 欧美日本不卡高清| 亚洲调教视频在线观看| 久久爱www久久做| 狠狠色丁香久久婷婷综合丁香| 久久精品国产清自在天天线| 嫩草影视亚洲| 国产精品99久久久久久宅男| 国产精品丝袜白浆摸在线| 性视频1819p久久| 欧美高清不卡| 亚洲一区二区三区涩| 国产精品亚洲视频| 老司机午夜免费精品视频| 亚洲精品国产视频| 欧美一区二区视频观看视频| 影院欧美亚洲| 国产精品h在线观看| 欧美中文日韩| 亚洲九九精品| 久久久久久9| 日韩一区二区久久| 国产在线播放一区二区三区| 米奇777在线欧美播放| 一区二区三区欧美| 欧美成人午夜免费视在线看片| 一区二区三区视频观看| 国产日韩欧美日韩| 欧美精品一区二区三区蜜桃| 性久久久久久久久久久久| 91久久国产综合久久| 久久福利毛片| 亚洲专区一区| 亚洲国产精品日韩| 国产视频不卡| 欧美午夜久久久| 美女脱光内衣内裤视频久久网站| 亚洲亚洲精品三区日韩精品在线视频 | 久久裸体艺术| 亚洲一二三级电影| 亚洲精品乱码久久久久久蜜桃91| 久久精品亚洲精品| 亚洲自拍电影| 亚洲精选大片| 91久久嫩草影院一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品v日韩精品| 欧美精品aa| 欧美va天堂在线| 久久久久女教师免费一区| 午夜综合激情| 亚洲欧美另类国产| 一区二区三区视频在线看| 亚洲国产成人不卡| 欧美成人精品高清在线播放| 久久视频这里只有精品| 欧美亚洲免费在线| 欧美一区二区三区精品| 亚洲一区精彩视频| 亚洲综合清纯丝袜自拍| 在线中文字幕日韩| 一区二区三区.www| 一区二区三区欧美日韩| 一本不卡影院| 一区二区三区精品视频在线观看| 亚洲美女性视频| 亚洲另类视频| 一区二区精品| 午夜日韩视频| 久久久久综合| 美女视频黄a大片欧美| 欧美成人免费小视频| 欧美成人激情视频| 亚洲激情网站| 99av国产精品欲麻豆| 亚洲图片在线| 亚洲欧美日韩爽爽影院| 久久国产精品72免费观看| 久久野战av| 欧美激情四色 | 性娇小13――14欧美| 欧美影视一区| 久热精品视频在线观看一区| 免费不卡在线观看av| 欧美日韩国产天堂| 国产精品美女www爽爽爽| 国产日韩欧美一二三区| 国产一区二区电影在线观看 | 国产精品午夜在线| 黑丝一区二区三区| 亚洲精品在线电影| 亚洲欧美国产毛片在线| 久久久久久69| 亚洲国产中文字幕在线观看| 艳妇臀荡乳欲伦亚洲一区| 亚洲综合色视频| 看片网站欧美日韩| 欧美日韩一级大片网址| 国产亚洲欧洲997久久综合| 亚洲激情午夜| 欧美一区二区大片| 欧美成人a∨高清免费观看| 一个色综合导航| 久久综合给合久久狠狠狠97色69| 欧美日韩精品欧美日韩精品 | 国产精品v亚洲精品v日韩精品| 国产亚洲精品久久久久婷婷瑜伽 | 国产日韩精品一区二区三区| 亚洲国产精品日韩| 亚洲欧美美女| 亚洲国产精品久久久久秋霞影院 | 欧美日本在线播放| 韩国久久久久| 亚洲一区二区精品在线观看| 久久亚洲图片| 亚洲与欧洲av电影| 欧美日本在线视频| 亚洲国产成人久久综合| 久久成人亚洲| 一本色道久久综合精品竹菊| 欧美不卡激情三级在线观看| 国产一区二区三区在线播放免费观看 |