中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
函數(shù)指針&指針函數(shù)
函數(shù)指針是指向函數(shù)的指針,指針函數(shù)還是指一個(gè)函數(shù)的返回值是一個(gè)指針
(1) float(**def)[10]   def是什么?

(2) double*(*gh)[10]   gh是什么?

(3) double(*f[10])()   f是什么?

(4) int*((*b)[10])    b是什么?

(1) def是一個(gè)指針, 指向的對(duì)象也是一個(gè)指針, 指向的指針最終指向的是10個(gè)float構(gòu)成的數(shù)組.(2) gh是指針, 指向的是10個(gè)元素構(gòu)成的數(shù)組, 數(shù)組的元素是double*類型的指針.(3) f是10個(gè)元素構(gòu)成的數(shù)組, 每個(gè)元素是指針, 指針指向的是函數(shù), 函數(shù)類型為無(wú)參數(shù)且返回值為double. 下面要講的竅門的例子跟這個(gè)很類似.(4) b是指針,指向的是10個(gè)元素構(gòu)成的數(shù)組, 數(shù)組元素為int*類型的指針.竅門如下:如果我們碰到復(fù)雜的類型聲明,該如何解析它?例如:char (*a[3])(int);a到底被聲明為什么東東?指針?數(shù)組?還是函數(shù)?分析時(shí),從a 最接近(按運(yùn)算符優(yōu)先級(jí))處開始。我們看到a最接近符號(hào)是[ ]——注意:*比[ ]的優(yōu)先級(jí)低。a后既然有[ ],那么a是數(shù)組,而且是包含3個(gè)元素的數(shù)組。那這個(gè)數(shù)組的每個(gè)元素是什么類型呢?雖然數(shù)組a只含有a[0]、a[1]、a[2]三個(gè)元素,a[3]實(shí)際上已經(jīng)越界,但在分析數(shù)組a的元素的類型時(shí),我們正好需要形式上的元素a[3]。知道了a[3]的類型,就知道了a的元素的類型。 a[3]是什么類型?是指針,因?yàn)樗那懊嬗?. 由此可知,數(shù)組a的元素是指針。光說(shuō)是指針還不夠。對(duì)于指針,必須說(shuō)出它指向的東東是什么類型。它指向的東東是什么,就看*a[3]是什么(a[3]是指針,它指向的東東當(dāng)然是*a[3])了。繼續(xù)按優(yōu)先級(jí)觀察,我們看到*a[3]后面有小括號(hào),所以可以肯定*a[3]是函數(shù)。即數(shù)組a的元素是指向函數(shù)的指針。指向的是什么類型的函數(shù)?這很明顯,是入?yún)閕nt、返回值為char的類型的函數(shù)。至此解析完畢。按上述方法,再?gòu)?fù)雜的也可以一步步解析出來(lái)。就像習(xí)武不是為了打人而是為了防身一樣,我們了解上述方法是為了看懂別人寫的復(fù)雜聲明,而不是為了在實(shí)踐中自己去構(gòu)造這種復(fù)雜的東東。實(shí)在需要復(fù)雜聲明時(shí),可以用typedef替代一部分。例如上面語(yǔ)句可改成兩句:typedef char (*FUN_PTR)(int);FUN_PTR a[3];這樣就清晰多了。此外,上面的分析方法還讓我們對(duì)某些東西的本質(zhì)更加清楚。比如,n維數(shù)組的本質(zhì)都是一維數(shù)組??磦€(gè)具體的例子:int a[3][5];這句聲明的是一個(gè)包含3個(gè)元素的一維數(shù)組,其每個(gè)元素又是一個(gè)由5個(gè)int數(shù)構(gòu)成的數(shù)組。我們不能理解為:a是一個(gè)包含5個(gè)元素的一維數(shù)組,其每個(gè)元素又是一個(gè)由3個(gè)int數(shù)構(gòu)成的數(shù)組。為什么?還是按上面的方法分析,這里從略。有的書上或網(wǎng)上提供"向右看,向左看"的方法, 其實(shí)缺乏通用性, 比如它不適用于對(duì)多維數(shù)組本質(zhì)的分析. 而且這種方法掩蓋了本質(zhì). 本質(zhì)應(yīng)該是按上面所講的,根據(jù)運(yùn)算符優(yōu)先級(jí)逐層剝開. 
 

【函數(shù)指針】
       在程序運(yùn)行中,函數(shù)代碼是程序的算法指令部分,它們和數(shù)組一樣也占用存儲(chǔ)空間,都有相應(yīng)的地址??梢允褂弥羔樧兞恐赶驍?shù)組的首地址,也可以使用指針變量指向函數(shù)代碼的首地址,指向函數(shù)代碼首地址的指針變量稱為函數(shù)指針。

1.函數(shù)指針定義

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

“函數(shù)類型”說(shuō)明函數(shù)的返回類型,由于“()”的優(yōu)先級(jí)高于“*”,所以指針變量名外的括號(hào)必不可少,后面的“形參列表”表示指針變量指向的函數(shù)所帶的參數(shù)列表。

例如:

int (*f)(int x);

double (*ptr)(double x);

在定義函數(shù)指針時(shí)請(qǐng)注意:
函數(shù)指針和它指向的函數(shù)的參數(shù)個(gè)數(shù)和類型都應(yīng)該是—致的;

函數(shù)指針的類型和函數(shù)的返回值類型也必須是一致的。

2.函數(shù)指針的賦值

函數(shù)名和數(shù)組名一樣代表了函數(shù)代碼的首地址,因此在賦值時(shí),直接將函數(shù)指針指向函數(shù)名就行了。

例如,

int func(int x);   /* 聲明一個(gè)函數(shù) */

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

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

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

3.通過函數(shù)指針調(diào)用函數(shù)

函數(shù)指針是通過函數(shù)名及有關(guān)參數(shù)進(jìn)行調(diào)用的。

與其他指針變量相類似,如果指針變量pi是指向某整型變量i的指針,則*p等于它所指的變量i;如果pf是指向某浮點(diǎn)型變量f的指針,則*pf就等價(jià)于它所指的變量f。同樣地,*f是指向函數(shù)func(x)的指針,則*f就代表它所指向的函數(shù)func。所以在執(zhí)行了f=func;之后,(*f)和func代表同一函數(shù)。

由于函數(shù)指針指向存儲(chǔ)區(qū)中的某個(gè)函數(shù),因此可以通過函數(shù)指針調(diào)用相應(yīng)的函數(shù)?,F(xiàn)在我們就討論如何用函數(shù)指針調(diào)用函數(shù),它應(yīng)執(zhí)行下面三步:

首先,要說(shuō)明函數(shù)指針變量。

例如:int (*f)(int x);

其次,要對(duì)函數(shù)指針變量賦值。

例如: f=func;    (func(x)必須先要有定義)

最后,要用 (*指針變量)(參數(shù)表);調(diào)用函數(shù)。

例如:    (*f)(x);(x必須先賦值)

注:我試了,如果以這樣調(diào)用結(jié)果也是對(duì)的:f(x); Q3代碼中也是這樣用的,不好理解。

【例】任意輸入n個(gè)數(shù),找出其中最大數(shù),并且輸出最大數(shù)值。

main()

{

        int f();

        int i,a,b;

        int (*p)();    /* 定義函數(shù)指針 */

        scanf("%d",&a);

        p=f;            /* 給函數(shù)指針p賦值,使它指向函數(shù)f */

        for(i=1;i<9;i++)

        {
                scanf("%d",&b);

                a=(*p)(a,b);    /* 通過指針p調(diào)用函數(shù)f */

        }

        printf("The Max Number is:%d",a)

}

f(int x,int y)

{

    int z;

    z=(x>y)?x:y;

    return(z);

}

運(yùn)行結(jié)果為:

343 -45 4389 4235 1 -534 988 555 789↙

The Max Number is:4389

【指針函數(shù)】

一個(gè)函數(shù)不僅可以帶回一個(gè)整型數(shù)據(jù)的值,字符類型值和實(shí)型類型的值,還可以帶回指針類型的數(shù)據(jù),使其指向某個(gè)地址單元。

        返回指針的函數(shù),一般定義格式為:

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

int *f(x,y);

其中x,y是形式參數(shù),f是函數(shù)名,調(diào)用后返回一個(gè)指向整型數(shù)據(jù)的地址指針。f(x,y)是函數(shù),其值是指針。

如:char *ch();表示的就是一個(gè)返回字符型指針的函數(shù),請(qǐng)看下面的例題:

【例】將字符串1(str1)復(fù)制到字符串2(str2),并輸出字符串2.

#include "stdio.h"

main()

{

    char *ch(char *,char *);

    char str1[]="I am glad to meet you!";

    char str2[]="Welcom to study C!";

    printf("%s",ch(str1,str2));

}

char *ch(char *str1,char *str2)

{

    int i;

    char *p;

    p=str2
    if(*str2==NULL) exit(-1);

    do

    {

        *str2=*str1;

        str1++;

        str2++;

    }while(*str1!=NULL);

    return(p);

}

通過分析可得

函數(shù)指針是一個(gè)指向函數(shù)的指針,而指針函數(shù)只是說(shuō)明他是一個(gè)返回值為指針的函數(shù),

函數(shù)指針可以用來(lái)指向一個(gè)函數(shù)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
函數(shù)指針和指針函數(shù)
C語(yǔ)言的那些秘密之---函數(shù)返回局部變量
函數(shù)指針詳解
一道試題引發(fā)的血案
C\C |指針詳述及實(shí)例分析
C語(yǔ)言指針與函數(shù)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服