日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++基础知识:函数指针和指针函数的基本概念

發布時間:2023/12/13 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++基础知识:函数指针和指针函数的基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【函數指針】

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

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

轉載于:https://www.cnblogs.com/zhanjxcom/p/4417053.html

總結

以上是生活随笔為你收集整理的C/C++基础知识:函数指针和指针函数的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。