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

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
指針的用法之函數(shù)指針 (amoBBS 阿莫電子論壇)

  最近在忙著學(xué)習(xí)移植操作系統(tǒng),但是操作系統(tǒng)全是由c語言編程實現(xiàn)的,里面的各式各樣的指針用法都有,所以將指針用法復(fù)習(xí)了一遍,現(xiàn)在把我的學(xué)習(xí)筆記貼出來,感興趣的都一起學(xué)習(xí)學(xué)習(xí)吧

另:該文檔屬原創(chuàng),轉(zhuǎn)載請說明出處
1、             指向函數(shù)的指針

一個函數(shù)在編譯的時候,分配一個入口地址,這個函數(shù)的入口地址就稱為函數(shù)的指針。可以通過一個指針變量指向函數(shù),然后通過該指針變量調(diào)用此函數(shù)。



#include <stdio.h>

Void mian ()

{

   Int max(int,int);

   Int (*p)(int,int);

   Int a,b,c;

   P=max;

   Scanf(“%d,%d”,&a,&b);

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

Printf(“max=%d”,c);

}

其中 Int (*p)(int,int);用來定義p是一個指向函數(shù)的指針變量 ,該函數(shù)有兩個整型參數(shù),函數(shù)值為整型。

注意*p兩側(cè)的括號不可以省略,表示p先與*結(jié)合,是指針變量,然后再與后面的()結(jié)合,表示此指針變量指向函數(shù)



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



賦值語句“p=max;”的作用是將函數(shù)max的入口地址賦給指針變量p。和數(shù)組名代表數(shù)組首元素地址類似 ,函數(shù)名代表該函數(shù)的入口地址。這時,p就是指向函數(shù)max的指針變量,p和max都是指向函數(shù)的開頭。但是不能用*(p+1)表示函數(shù)的下一條指令。



注意:

(1)      指向函數(shù)的指針變量定義形式

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

       這里的數(shù)據(jù)類型指函數(shù)返回值的類型。

(2)      函數(shù)調(diào)用可以通過函數(shù)名,也可以通過函數(shù)指針。

(3)      Int(*p)(int,int);表示定義一個指向函數(shù)的指針變量P,不是固定指向某一個函數(shù),而只是表示定義了這樣一個類型的變量,它是專門存放函數(shù)的入口地址的,在一個程序中,一個指針變量可以先后指向同類型的不同函數(shù)。

(4)      給指針變量賦值時,只需給出函數(shù)名而不必給出參數(shù)
如p=max;
因為這是將函數(shù)的入口地址賦給p,而不牽涉實參和形參的結(jié)合問題,不能寫成
p=max(a,b);

(5)      用函數(shù)指針變量調(diào)用參數(shù)時,只需將(*P)代替函數(shù)名即可,在(*p)之后的括號中,根據(jù)需要寫上實參。如
c=(*p)(a,b)
表示“調(diào)用由p指向的函數(shù),實參為a,b得到的函數(shù)值賦給 c”

(6)      對指針函數(shù)的指針變量,像p++,p+n,p—等運算是沒有意義的。





2、             用指向函數(shù)的指針作函數(shù)的參數(shù)



原理:有一個sub函數(shù),它有兩個形參x1,x2,定義x1,x2為指向函數(shù)的指針變量。在調(diào)用函數(shù)sub時,實參為另個函數(shù)名f1,f2,給形參傳遞的是函數(shù)f1,f2的地址。這樣在函數(shù)sub中就可以調(diào)用f1,f2了。如:



實參函數(shù)名     f1       f2      

void sub(int(*x1)(int),int(*x2)(int))

{

   inta,b,i,j;

   a=(*x1)(i);

   b=(*x2)(i,j);

}

      為什么不直接調(diào)用f1,f2函數(shù)呢,而要用函數(shù)指針變量呢? 如果只是用到f1,f2函數(shù),完全可以在sub函數(shù)中直接調(diào)用f1,f2;但是如果在每次調(diào)用sub函數(shù)時,要調(diào)用的函數(shù)不是固定的,這次調(diào)用f1f2,下次可能需要調(diào)用f3,f4,這時,用指針變量就比較方便了。只要在每次調(diào)用sub函數(shù)時給出不同的函數(shù)名作為實參即可。

              如:
#include <stdio.h>



void main()

{

              int max(int,int);

              int min(int,int);

              int add(int,int);

              voidprocess(int,int,int(*fun)(int,int));



              //以上是函數(shù)聲明



              int a,b;

              printf("enter a andb:");

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

              printf("max=");

              process(a,b,max);

              printf("min=");

              process(a,b,min);

              printf("sum=");

              process(a,b,add);



}

//函數(shù)定義

int max(int x,int y)

{

              int a;

              if(x>y)

                   a=x;

              else

                   a=y;

              return (a);

}

int min (int x,int y)

{

              int z;

              if(x>y)

                   z=y;

              else

                   z=x;

              return z;

}

int add(int x,inty)

{

              int z;

              z=x+y;

              return z;

}

void process(int x,inty,int(*fun)(int,int))

{

              int  result;

              result=(*fun)(x,y);

              printf("%d\n",result);

}

運行結(jié)果:

Enter a and b :1,6

Max=6

Min=1

Sum=7



分析:在定義process函數(shù)時,在函數(shù)首部用int (*fun)(int,int)表示fun是指向函數(shù)的指針,該函數(shù)是一個整型函數(shù),有兩個整型實參。

注意,對作為實參的函數(shù),應(yīng)在主調(diào)函數(shù)中用原型作函數(shù)聲明。

參考:譚浩強 《C程序設(shè)計》第三版
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言學(xué)習(xí)——指針精華(3)工程項目復(fù)習(xí)
指針函數(shù)和函數(shù)指針 zz
C語言的那些小秘密之函數(shù)指針
一看就會的C語言筆記——指針函數(shù)、函數(shù)指針、回調(diào)函數(shù)
C語言數(shù)組名作函數(shù)參數(shù)
stdarg.h
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服