九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

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

開通VIP
函數(shù)指針

函數(shù)指針

函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。如前所述,C在編譯時,每一個函數(shù)都有一個入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂?。有了指向函?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類型變量一樣,在這些概念上是一致的。函數(shù)指針有兩個用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。

函數(shù)指針的聲明方法為:
  數(shù)據(jù)類型標(biāo)志符 (指針變量名) (形參列表);
  注1:“函數(shù)類型”說明函數(shù)的返回類型,由于“()”的優(yōu)先級高于“*”,所以指針變量名外的括號必不可少,后面的“形參列表”表示指針變量指向的函數(shù)所帶的參數(shù)列表。例如:
  int func(int x); /* 聲明一個函數(shù) */
  int (*f) (int x); /* 聲明一個函數(shù)指針 */
  f=func; /* 將func函數(shù)的首地址賦給指針f */
  賦值時函數(shù)func不帶括號,也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
  注2:函數(shù)括號中的形參可有可無,視情況而定。
  下面的程序說明了函數(shù)指針調(diào)用函數(shù)的方法:
  例一、
  #include<stdio.h>
  int max(int x,int y){ return(x>y?x:y); }
  void main()
  {
  int (*ptr)(int, int);
  int a,b,c;
  ptr=max;
  scanf("%d,%d",&a,&b);
  c=(*ptr)(a,b);
  printf("a=%d,b=%d,max=%d",a,b,c);
  }
  ptr是指向函數(shù)的指針變量,所以可把函數(shù)max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來調(diào)用該函數(shù),實(shí)際上ptr和max都指向同一個入口地址,不同就是ptr是一個指針變量,不像函數(shù)名稱那樣是死的,它可以指向任何函數(shù),就看你想怎么做了。在程序中把哪個函數(shù)的地址賦給它,它就指向哪個函數(shù)。而后用指針變量調(diào)用它,因此可以先后指向不同的函數(shù)。不過注意,指向函數(shù)的指針變量沒有++和--運(yùn)算,用時要小心。
  不過,在某些編譯器中這是不能通過的。這個例子的補(bǔ)充如下。
  應(yīng)該是這樣的:
  1.定義函數(shù)指針類型:
  typedef int (*fun_ptr)(int,int);
  2.申明變量,賦值:
  fun_ptr max_func=max;
  也就是說,賦給函數(shù)指針的函數(shù)應(yīng)該和函數(shù)指針?biāo)傅暮瘮?shù)原型是一致的。
  例二、
  #include<stdio.h>
  void FileFunc()
  {
  printf("FileFunc\n");
  }
  void EditFunc()
  {
  printf("EditFunc\n");
  }
  void main()
  {
  typedef void (*funcp)();
  funcp=FileFunc;
  (*funcp)();
  funcp=EditFunc;
  (*funcp)();
  }

指針函數(shù)和函數(shù)指針的區(qū)別

  1,這兩個概念都是簡稱,指針函數(shù)是指帶指針的函數(shù),即本質(zhì)是一個函數(shù)。我們知道函數(shù)都又有返回類型(如果不返回值,則為無值型),只不過指針函數(shù)返回類型是某一類型的指針。
  其定義格式如下所示:
  返回類型標(biāo)識符 *返回名稱(形式參數(shù)表)
  { 函數(shù)體 }
  返回類型可以是任何基本類型和復(fù)合類型。返回指針的函數(shù)的用途十分廣泛。事實(shí)上,每一個函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當(dāng)于一個指針。比如函數(shù)返回一個整型值,實(shí)際上也相當(dāng)于返回一個指針變量的值,不過這時的變量是函數(shù)本身而已,而整個函數(shù)相當(dāng)于一個“變量”。例如下面一個返回指針函數(shù)的例子:
  #include<iostream>
  using namespace std;
  void main()
  {
  float *find(float(*pionter)[4],int n);
  static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
  float *p;
  int i,m;
  cout<<"Enter the number to be found:";
  cin>>m;
  p=find(score,m);
  for(i=0;i<4;i++)
  cout<<" "<<*(p+i);
  }
  float *find(float(*pionter)[4],int n)/*定義指針函數(shù)*/
  {
  float *pt;
  pt=*(pionter+n);
  return(pt);
  }
  學(xué)生學(xué)號從0號算起,函數(shù)find()被定義為指針函數(shù),起形參pointer是指針指向包含4個元素的一維數(shù)組的指針變量。pointer+1指向 score的第一行。*(pointer+1)指向第一行的第0個元素。pt是一個指針變量,它指向浮點(diǎn)型變量。main()函數(shù)中調(diào)用find()函數(shù),將score數(shù)組的首地址傳給pointer.
  2,“函數(shù)指針”是指向函數(shù)的指針變量,因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。如前所述,C在編譯時,每一個函數(shù)都有一個入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂?。有了指向函?shù)的指針變量后,可用該指針變量調(diào)用函數(shù),就如同用指針變量可引用其他類型變量一樣,在這些概念上一致的。函數(shù)指針有兩個用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。
  函數(shù)指針的說明方法為:
  數(shù)據(jù)類型標(biāo)志符 (*指針變量名)(參數(shù));
  注1:函數(shù)括號中的參數(shù)可有可無,視情況而定。下面的程序說明了函數(shù)指針調(diào)用函數(shù)的方法:
  #include
  int max(int x,int y){ return(x>y?x:y); }
  void main()
  {
  int (*ptr)();
  int a,b,c;
  ptr=max;
  scanf("%d,%d",&a,&b);
  c=(*ptr)(a,b);
  printf("a=%d,b=%d,max=%d",a,b,c);
  }
  ptr是指向函數(shù)的指針變量,所以可把函數(shù)max()賦給ptr作為ptr的值,即把max()的入口地址賦給ptr,以后就可以用ptr來調(diào)用該函數(shù),實(shí)際上ptr和max都指向同一個入口地址,不同就是ptr是一個指針變量,不像函數(shù)名稱那樣是死的,它可以指向任何函數(shù),就看你想怎么做了。在程序中把 哪個函數(shù)的地址賦給它,它就指向哪個函數(shù)。而后用指針變量調(diào)用它,因此可以先后指向不同的函數(shù),不過注意,指向函數(shù)的指針變量沒有++和--運(yùn)算,用時要小心。

關(guān)于函數(shù)指針數(shù)組的定義

  關(guān)于函數(shù)指針數(shù)組的定義方法,有兩種:一種是標(biāo)準(zhǔn)的方法;一種是蒙騙法。
  第一種,標(biāo)準(zhǔn)方法:
  {
  分析:函數(shù)指針數(shù)組是一個其元素是函數(shù)指針的數(shù)組。那么也就是說,此數(shù)據(jù)結(jié)構(gòu)是是一個數(shù)組,且其元素是一個指向函數(shù)入口地址的指針。
  根據(jù)分析:首先說明是一個數(shù)組:數(shù)組名[]
  其次,要說明其元素的數(shù)據(jù)類型指針:*數(shù)組名[].
  再次,要明確這每一個數(shù)組元素是指向函數(shù)入口地址的指針:函數(shù)返回值類型 (*數(shù)組名[])().請注意,這里為什么要把“*數(shù)組名[]”用括號擴(kuò)起來呢?因?yàn)閳A括號和數(shù)組說明符的優(yōu)先級是等同的,如果不用圓括號把指針數(shù)組說明表達(dá)式擴(kuò)起來,根據(jù)圓括號和方括號的結(jié)合方向,那么 *數(shù)組名[]() 說明的是什么呢?是元素返回值類型為指針的函數(shù)數(shù)組。有這樣的函數(shù)數(shù)祖嗎?不知道。所以必須括起來,以保證數(shù)組的每一個元素是指針。
  }
  第二種,蒙騙法:
  盡管函數(shù)不是變量,但它在內(nèi)存中仍有其物理地址,該地址能夠賦給指針變量。獲取函數(shù)方法是:用不帶有括號和參數(shù)的函數(shù)名得到。
  函數(shù)名相當(dāng)于一個指向其函數(shù)入口指針常量。 那么既然函數(shù)名是一個指針常量,那么就可以對其進(jìn)行一些相應(yīng)的處理,如強(qiáng)制類型轉(zhuǎn)換。
  那么我們就可以把這個地址放在一個整形指針數(shù)組中,然后作為函數(shù)指針調(diào)用即可。
  完整例子:
  #include "stdio.h"
  int add1(int a1,int b1);
  int add2(int a2,int b2);
  void main()
  {
  int numa1=1,numb1=2;
  int numa2=2,numb2=3;
  int (*op[2])(int a,int b);
  op[0]=add1;
  op[1]=add2;
  printf("%d %d\n",op[0](numa1,numb1),op[1](numa2,numb2));
  }
  int add1(int a1,int b1)
  {
  return a1+b1;
  }
  int add2(int a2,int b2)
  {
  return a2+b2;
  }
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
int **p 、int (*p)() 、 int (*p)[5] 和int (**p)()
指針函數(shù)與函數(shù)指針的區(qū)別
指針基本操作總結(jié)-賦值
C語言難點(diǎn)分析整理
指針數(shù)組,數(shù)組指針,以及函數(shù)指針,以及堆中的分配規(guī)則
考查嵌入式C開發(fā)人員的最好的0x10道題
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服