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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

指針函數(shù)與函數(shù)指針

2019-11-11 01:01:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.指針函數(shù)

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

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

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

下面看指針函數(shù)的實(shí)現(xiàn):

[cpp] view plain copyint *f(int a, int b); // 聲明指針函數(shù)    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;  }    /*  * 指針函數(shù)的定義  * 返回值是指針類型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;  }  通過(guò)運(yùn)行結(jié)果,可以看出,指針函數(shù)f返回的類型是一個(gè)指針類型,因?yàn)閒是賦值給int類型指針p1的,如果不是指針類型,編譯就會(huì)出錯(cuò)。

下面是運(yùn)行結(jié)果:

從上圖的運(yùn)行結(jié)果可以看出,指針函數(shù)f的返回值p和f賦值給的指針p1的地址是相同的,都是指向指針函數(shù)內(nèi)部申請(qǐng)的內(nèi)存地址0x3b88d0。

下面是debug查看的指針p1和指針p的內(nèi)存地址。

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

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

(3)執(zhí)行完指針函數(shù)f后,把f的返回值p賦給先前定義的地址p1,此時(shí)p1的地址和p的地址相同。p1的地址如下圖中紅色框內(nèi)所示,p1的地址是0x003b88d0,與p的地址相同,p的地址如下圖中藍(lán)色框內(nèi)所示,并且兩者的值也都是3,因?yàn)槭侵赶蛲粋€(gè)地址,所以值必然相同:

所以,指針函數(shù)就是返回一個(gè)地址給調(diào)用者,用于需要地址的情況。

2.函數(shù)指針

顧名思義,函數(shù)指針說(shuō)的就是一個(gè)指針,但這個(gè)指針指向的函數(shù),不是普通的基本數(shù)據(jù)類型或者類對(duì)象。

函數(shù)指針的定義如下:

[cpp] view plain copyint (*f)(int a, int b); // 聲明函數(shù)指針  通過(guò)與1中指針函數(shù)的定義對(duì)比可以看到,函數(shù)指針與指針函數(shù)的最大區(qū)別是函數(shù)指針的函數(shù)名是一個(gè)指針,即函數(shù)名前面有一個(gè)指針類型的標(biāo)志型號(hào)“*”。

當(dāng)然,函數(shù)指針的返回值也可以是指針。

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

下面是利用函數(shù)指針?lè)謩e求兩個(gè)整數(shù)的最大值和最小值的用法。

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

執(zhí)行結(jié)果如下:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 喀喇沁旗| 修文县| 英吉沙县| 汝南县| 那坡县| 鄂托克旗| 随州市| 德阳市| 永嘉县| 专栏| 独山县| 密山市| 富源县| 城市| 黄平县| 盐边县| 加查县| 鸡泽县| 肇东市| 百色市| 大竹县| 襄垣县| 彰化县| 长兴县| 呼和浩特市| 营山县| 阿图什市| 汝州市| 双流县| 水富县| 临潭县| 改则县| 余干县| 蓬溪县| 东安县| 鄂托克前旗| 新和县| 太白县| 乐东| 黎城县| 光山县|