一個指向指針函數的函數指針


首先明白兩個概念:

函數指針:一個指向函數的指針,這個指針獲得對應的函數名的地址。比如說整型指針,我們知道是一個指向整型數據的指針,那么函數指針顧名思義就是一個指向函數的指針,

        聲明一個整型變量這樣寫: int a;

     聲明一個整型指針這樣寫:int * a; //即變量名加個*號

     聲明一個返回值為整型的函數這樣寫: int Swap(int*,  int*);

     聲明一個指向返回值為整型的函數的指針這樣寫:int (*Swap)(int*, int*);//其中這個int就是所指向的函數的返回值類型,如果這個指向的函數的返回值是個整型指針,那么就可以寫成 int* (*Swap)(int*, int* )

指針函數:一個返回值為指針的函數,比如說整型函數是值返回值為整型的函數,那么指針函數的意思就是返回值是指針,

     聲明一個返回值為整型的函數這樣寫: int a(int, int);

     聲明一個返回值為整型指針的函數這樣寫:int * Swap(int*, int*); 把后面的Swap(int*, int*)當成也給變量p ,也就成了int* p這種常見的形式了。

 

一個指向指針函數的函數指針

    首先分析下,這個描述其實描述的還是函數指針,這個指針指向一個函數,而且函數的返回值是個指針,看起來有點繞:

    1. 這個指針的組成部分有:   指向函數的返回值類型      (* 指針變量)(函數的形參表)

    2. 即寫成 ,           int *      (*    p      )(int*, int*)

    3. 寫漂亮點就是 int *(*p)(int*, int*)

 

 1 #include<stdio.h>
 2 //下面定義一個指針函數 
 3 int* Swap(int *a, int *b){
 4     
 5     int temp;
 6     temp = *a;
 7     *a = *b;
 8     *b = temp;
 9     return a;
10 }
11 //定義某個函數的函數指針,首先必須要申明這個指針指向一個返回值是什么樣的函數,int* 這是函數的返回類型,
12 //(*pSwap)是聲明一個指針,所以int* (*pSwap)(int*,int*) 是一個指針函數的函數指針。 
13 int main(){
14     int* (*pSwap) (int *, int *);//下面定義一個函數指針,這是一個指針,指向一個返回值為int *的函數 
15     int a = 99, b= 100, c= 0;
16     c=*Swap(&a,&b);
17     pSwap=Swap;//得到這個函數的地址 
18     printf("返回的數值是,a原來是99,現在是: %d\n",c);
19     printf("返回的數值是,a原來是99,現在是: %d\n",*pSwap(&a, &b));
20     return 0;
21 }

 

 

 

 

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM