C/C++基礎知識:函數指標和指標函數的基本概念

來源:互聯網
上載者:User

標籤:

【函數指標】

       在程式運行中,函數代碼是程式的演算法指令部分,它們和數組一樣也佔用儲存空間,都有相應的地址。可以使用指標變數指向數組的首地址,也可以使用指標變數指向函數代碼的首地址,指向函數代碼首地址的指標變數稱為函數指標。

1.函數指標定義

函數類型 (*指標變數名)(形參列表);

“函數類型”說明函數的傳回型別,由於“()”的優先順序高於“*”,所以指標變數名外的括弧必不可少,後面的“形參列表”表示指標變數指向的函數所帶的參數列表。

例如:

int (*f)(int x);

double (*ptr)(double x);

在定義函數指標時請注意:
    
函數指標和它指向的函數的參數個數和類型都應該是—致的;

函數指標的類型和函數的傳回值類型也必須是一致的。

2.函數指標的賦值

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

例如,

int func(int x);   /* 聲明一個函數 */

int (*f) (int x);    /* 聲明一個函數指標 */

f=func;            /* 將func函數的首地址賦給指標f */

賦值時函數func不帶括弧,也不帶參數,由於func代表函數的首地址,因此經過賦值以後,指標f就指向函數func(x)的代碼的首地址。

3.通過函數指標調用函數

函數指標是通過函數名及有關參數進行調用的。

與其他指標變數相類似,如果指標變數pi是指向某整型變數i的指標,則*p等於它所指的變數i;如果pf是指向某浮點型變數f的指標,則*pf就等價於它所指的變數f。同樣地,*f是指向函數func(x)的指標,則*f就代表它所指向的函數func。所以在執行了f=func;之後,(*f)和func代表同一函數。

由於函數指標指向儲存區中的某個函數,因此可以通過函數指標調用相應的函數。現在我們就討論如何用函數指標調用函數,它應執行下面三步:

首先,要說明函數指標變數。

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

其次,要對函數指標變數賦值。

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

最後,要用 (*指標變數)(參數表);調用函數。

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


【例】任意輸入n個數,找出其中最大數,並且輸出最大數值。

main()

{

        int f();

        int i,a,b;

        int (*p)();    /* 定義函數指標 */

        scanf("%d",&a);

        p=f;            /* 給函數指標p賦值,使它指向函數f */

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

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

                a=(*p)(a,b);    /* 通過指標p調用函數f */

        }

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

}


f(int x,int y)

{

    int z;

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

    return(z);

}

運行結果為:

343 -45 4389 4235 1 -534 988 555 789

The Max Number is:4389


【指標函數】

一個函數不僅可以帶回一個整型資料的值,字元類型值和實型類型的值,還可以帶回指標類型的資料,使其指向某個地址單元。

        返回指標的函數,一般定義格式為:

        類型標識符    *函數名(參數表)

int *f(x,y);

其中x,y是形式參數,f是函數名,調用後返回一個指向整型資料的地址指標。f(x,y)是函數,其值是指標。

如:char *ch();表示的就是一個返回字元型指標的函數,請看下面的例題:

【例】將字串1(str1)複製到字串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);

}


通過分析可得

函數指標是一個指向函數的指標,而指標函數只是說明他是一個傳回值為指標的函數,

函數指標可以用來指向一個函數。

參考:http://www.kuqin.com/language/20080614/9502.html

C/C++基礎知識:函數指標和指標函數的基本概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.