国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

指針函數與函數指針

2019-11-11 01:21:27
字體:
來源:轉載
供稿:網友

1.指針函數

先看下面的函數聲明,注意,此函數有返回值,返回值為int *,即返回值是指針類型的。

[cpp] view plain copyint *f(int a, int b);  上面的函數聲明又可以寫成如下形式:

int* f(int a, int b);讓指針標志 * 與int緊貼在一起,而與函數名f間隔開,這樣看起來就明了些了,f是函數名,返回值類型是一個int類型的指針。

下面看指針函數的實現:

[cpp] view plain copyint *f(int a, int b); // 聲明指針函數    int _tmain(int argc, _TCHAR* argv[])  {      PRintf("------------------------------ Start/n");        int *p1 = NULL;      printf("The memeory address of p1 = 0x%x /n", p1);        p1 = f(1, 2);        printf("The memeory address of p1 = 0x%x /n", p1);      printf("*p1 = %d /n", *p1);        printf("------------------------------ End/n");      getchar();      return 0;  }    /*  * 指針函數的定義  * 返回值是指針類型int *  */  int *f(int a, int b) {      int *p = (int *)malloc(sizeof(int));      printf("The memeory address of p = 0x%x /n", p);      memset(p, 0, sizeof(int));      *p = a + b;      printf("*p = %d /n", *p);        return p;  }  通過運行結果,可以看出,指針函數f返回的類型是一個指針類型,因為f是賦值給int類型指針p1的,如果不是指針類型,編譯就會出錯。

下面是運行結果:

從上圖的運行結果可以看出,指針函數f的返回值p和f賦值給的指針p1的地址是相同的,都是指向指針函數內部申請的內存地址0x3b88d0。

下面是debug查看的指針p1和指針p的內存地址。

(1)指針p1剛定義時的指向NULL,也就是空指針,地址是0。p1的地址如紅色框內所示,p1地址為0x00000000。

(2)指針函數f內的返回值p的地址如下圖中紅色框內所示,p的地址是0x003b88d0:

(3)執行完指針函數f后,把f的返回值p賦給先前定義的地址p1,此時p1的地址和p的地址相同。p1的地址如下圖中紅色框內所示,p1的地址是0x003b88d0,與p的地址相同,p的地址如下圖中藍色框內所示,并且兩者的值也都是3,因為是指向同一個地址,所以值必然相同:

所以,指針函數就是返回一個地址給調用者,用于需要地址的情況。

2.函數指針

顧名思義,函數指針說的就是一個指針,但這個指針指向的函數,不是普通的基本數據類型或者類對象。

函數指針的定義如下:

[cpp] view plain copyint (*f)(int a, int b); // 聲明函數指針  通過與1中指針函數的定義對比可以看到,函數指針與指針函數的最大區別是函數指針的函數名是一個指針,即函數名前面有一個指針類型的標志型號“*”。

當然,函數指針的返回值也可以是指針。

上面的函數指針定義為一個指向一個返回值為整型,有兩個參數并且兩個參數的類型都是整型的函數。

下面是利用函數指針分別求兩個整數的最大值和最小值的用法。

[cpp] view plain copy/*  * 求最大值  * 返回值是int類型,返回兩個整數中較大的一個  */  int max(int a, int b) {      return a > b ? a : b;  }    /*  * 求最小值  * 返回值是int類型,返回兩個整數中較小的一個  */  int min(int a, int b) {      return a < b ? a : b;  }    int (*f)(int, int); // 聲明函數指針,指向返回值類型為int,有兩個參數類型都是int的函數    int _tmain(int argc, _TCHAR* argv[])  {      printf("------------------------------ Start/n");        f = max; // 函數指針f指向求最大值的函數max      int c = (*f)(1, 2);        printf("The max value is %d /n", c);        f = min; // 函數指針f指向求最小值的函數min      c = (*f)(1, 2);        printf("The min value is %d /n", c);        printf("------------------------------ End/n");      getchar();      return 0;  }  

執行結果如下:


上一篇:什么是SysWow64

下一篇:forward 和 redirect

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广宗县| 望奎县| 崇仁县| 弥勒县| 浦北县| 福清市| 文安县| 乐清市| 泰兴市| 南投市| 鹤峰县| 英德市| 大宁县| 凤山县| 白水县| 绩溪县| 辽宁省| 西乌珠穆沁旗| 绥芬河市| 林周县| 营口市| 左云县| 包头市| 屯留县| 连南| 尼木县| 宜兰市| 白朗县| 郧西县| 舒城县| 石林| 湖南省| 保山市| 常熟市| 吴旗县| 仲巴县| 屯门区| 平塘县| 饶平县| 盖州市| 晋宁县|