一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

指針函數(shù)與函數(shù)指針的區(qū)別

 charlie_linux 2024-10-31

1、指針函數(shù):是指帶指針的函數(shù),即本質(zhì)是一個函數(shù)。函數(shù)返回類型是某一類型的指針

類型標(biāo)識符  *函數(shù)名(參數(shù)表)

int *fun(x,y);

首先它是一個函數(shù),只不過這個函數(shù)的返回值是一個地址值。函數(shù)返回值必須用同一類型的指針變量來接收。也就是說指針函數(shù)一定有函數(shù)返回值,而且,在主調(diào)函數(shù)中,函數(shù)返回值必須賦給同類型的指針變量。

(1)、定義指針函數(shù)的一般形式如下:

類型名  *函數(shù)名(參數(shù));

例如:

int *fun(int a);
int *p;
p =fun(a);


2、函數(shù)指針:函數(shù)指針是指向函數(shù)的指針變量,即本質(zhì)是一個指針變量。

(1)、什么是函數(shù)指針

如果在程序中定義了一個函數(shù),在編譯時,編譯系統(tǒng)為函數(shù)代碼分配了一段存儲空間,這段存儲空間的起始地址(又稱為入口地址)稱為這個函數(shù)的指針。

可以定義一個指向函數(shù)的指針變量,用來存放某一函數(shù)的起始地址,這就意味著此指針變量指向該函數(shù)。例如:

int (*p) (int ,int );
//定義p是一個指向函數(shù)的指針變量,
它可以指向函數(shù)的類型為整型且有兩個整型參數(shù)的函數(shù)。
p的類型是int (*)(int ,int )表示。

(2)、用函數(shù)的指針變量調(diào)用函數(shù)

如果想調(diào)用一個函數(shù),除了可以通過函數(shù)名調(diào)用以外,還可以通過指向函數(shù)的指針變量來調(diào)用該函數(shù)。

例子1:用函數(shù)求整數(shù)a和b中的大者。

(1)、通過函數(shù)名調(diào)用函數(shù)

/*************************
(1)、通過函數(shù)名調(diào)用函數(shù)
*************************/
#include <stdio.h>

int main()
{
    int max(int, int);//函數(shù)的聲明
    int a, b, c;
    printf("Pleade input 2 integer numbers:");
    scanf_s("%d,%d", &a, &b);
    c = max(a, b);//通過函數(shù)名調(diào)用max函數(shù)
    printf("a=%d\nb=%d\nmax=%d\n", a, b, c);
    getchar();
    return 0;
}
int max(int x,int y)//定義max函數(shù)
{
    int z;
    if (x > y)
        z = x;
    else
        z = y;

    return (z);
}

(2)、通過指針變量訪問它所指向的函數(shù)

/*************************
(2)、通過指針變量訪問它所指向的函數(shù)
*************************/
#include <stdio.h>

int main()
{
    int max(int, int);//函數(shù)的聲明
    int (*p)(int,int);//定義指向函數(shù)的指針變量p
    int a, b, c;
    p = max;//使p指向max函數(shù)
    printf("Pleade input 2 integer numbers:");
    scanf_s("%d,%d", &a, &b);
    c =(*p)(a, b); //通過指針變量調(diào)用max函數(shù)
    printf("a=%d\nb=%d\nmax=%d\n", a, b, c);
    system("pause");
    return 0;
}
int max(int x,int y)//定義max函數(shù)
{
    int z;
    if (x > y)
        z = x;
    else
        z = y;

    return (z);
}

上面的兩個程序的運行結(jié)果一樣。

注意:

對于“int (*p)(int ,int);”,*p兩側(cè)的括號不能省略,表示p先與*結(jié)合,是指針變量,然后再與后面的()結(jié)合,()表示的是函數(shù),即該指針變量不是指向一般的變量,而是指向函數(shù)。

如果寫成“int * p(int ,int );”,由于()優(yōu)先級高于*,它相當(dāng)于“int *(p(int,int));”就成了聲明一個p函數(shù)了(這個函數(shù)的返回值是指向整型變量的指針)。

“p=max;”的作用是將函數(shù)max的入口地址賦給指針變量p。和數(shù)組名代表數(shù)組首元素地址類似,函數(shù)名代表函數(shù)的入口地址。這樣p就是指向函數(shù)max的指針變量,此時p和max都指向函數(shù)的開頭。調(diào)用*p就是調(diào)用max函數(shù)。

(3)、怎樣定義和使用指向函數(shù)的指針變量

定義指向函數(shù)的指針變量的一般形式如下:

類型名   (*指針變量名)(函數(shù)參數(shù)列表);

注意:

1、定義指向函數(shù)的指針變量,并不意味著這個指針變量可以指向任何函數(shù),它只能指向定義時指定的類型的函數(shù)。如:“int (*p) (int ,int );”表示指針變量p只能指向函數(shù)返回值為整型且有兩個整型參數(shù)的函數(shù)。

2、如果要用指針調(diào)用函數(shù),必須先使指針變量指向該函數(shù)。如:p = max;

3、在給函數(shù)指針變量賦值時,只需給出函數(shù)名而不必給出參數(shù),如:

p = max;//將函數(shù)的入口地址賦給p

如果寫成:

p = max(a,b);

就錯了,因為p=max(a,b)是將調(diào)用max函數(shù)所得到的函數(shù)值賦給p,而不是將函數(shù)的入口地址賦給p。

4、用函數(shù)指針變量調(diào)用函數(shù)時,只需將(*p)代替函數(shù)名即可(p為指針變量名,存放的是函數(shù)的入口地址),在(*p)之后的()中根據(jù)需要寫上實參。例如:

c =(*p) (a,b);

5、對指向函數(shù)的指針變量不能進(jìn)行算術(shù)運算,如:p+n、p++、p--等運算是沒有意義的。

6、用函數(shù)名調(diào)用函數(shù),只能調(diào)用所指定的一個函數(shù),而通過指針變量調(diào)用函數(shù)則比較靈活,可以根據(jù)不同的情況先后調(diào)用不同的函數(shù)。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    富婆又大又白又丰满又紧又硬 | 婷婷激情四射在线观看视频| 午夜精品福利视频观看| 久久99爱爱视频视频| 少妇人妻无一区二区三区| 亚洲一区二区三区日韩91| 日韩精品一区二区三区射精 | 东京热男人的天堂一二三区| 国产又长又粗又爽免费视频 | 国产欧美日本在线播放| 日韩精品中文字幕亚洲| 蜜臀人妻一区二区三区| 精品国产亚洲av成人一区| 亚洲视频偷拍福利来袭| 亚洲另类女同一二三区| 亚洲成人免费天堂诱惑| 午夜福利直播在线视频| 亚洲第一香蕉视频在线| 亚洲a码一区二区三区| 91亚洲人人在字幕国产| 九九热视频网在线观看| 不卡在线播放一区二区三区| 狠狠做五月深爱婷婷综合| 日韩高清一区二区三区四区 | 久久99精品国产麻豆婷婷洗澡| 国产精品欧美激情在线观看| 韩国日本欧美国产三级| 国产大屁股喷水在线观看视频| 中文字幕日产乱码一区二区| 国产一区欧美一区日本道| 日韩一区二区三区嘿嘿| 欧美精品一区二区三区白虎| 久久人人爽人人爽大片av| 免费久久一级欧美特大黄孕妇| 亚洲av熟女一区二区三区蜜桃| 国产乱淫av一区二区三区| 国产美女网红精品演绎| 色婷婷视频在线精品免费观看| 中文字幕亚洲在线一区| 国产二级一级内射视频播放| 日本东京热视频一区二区三区|