1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      c語言通過指針獲取函數(shù)名 c語言 取指針

      在C語言中,指向函數(shù)的指針怎么調(diào)用函數(shù)?

      1樓感覺對函數(shù)指針不是很了解,就不評論了. 2樓的基本還可以,但是int (*p)(),然后讓它指向max函數(shù),一個(gè)包含兩個(gè)未知量的函數(shù),這在后來的標(biāo)準(zhǔn)c里面是不支持的好像. 3樓吧,那么多*,感覺有點(diǎn)不大對. *是取內(nèi)容,連著那么* ,我沒試過,沒有多少意義至少.他11級了,應(yīng)該也不會怎么有錯(cuò),你可以試試(我不打算加那么多*, 就不調(diào)試了).

      創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的聶榮網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

      程序里面對函數(shù)的調(diào)用,就是通過函數(shù)的入口地址,然轉(zhuǎn)入函數(shù). 這樣的話,函數(shù)指針的意義就明顯了.函數(shù)指針指向了函數(shù)的入口,即函數(shù)指針里是函數(shù)的入口地址. 指針不能指向函數(shù)這種說法肯定是不對的.話說回來,1樓的老兄可能看錯(cuò)書了,或者記錯(cuò)了.

      類型匹配很重要,二樓的聲明和使用不一致,這在老版的編譯器里也是支持的.那時(shí)候ANSI標(biāo)準(zhǔn)還沒有制定出來.現(xiàn)在而言,這種定義應(yīng)該不被支持了才是.

      那個(gè)聲明應(yīng)該如下:

      int (*p)(int , int);

      這樣才能指向

      int name(int,int)型的函數(shù).么有實(shí)驗(yàn)過,但按這種寫法是不錯(cuò)的肯定.

      三樓那個(gè)********p,怎么都覺得不對.

      C語言 如何通過文件指針獲得文件名?

      在tc20中,一旦你成功打開一個(gè)文件,他將返回一個(gè)文件指針。

      FILE?*fp;

      fp=fopen("abc.dat",文件狀態(tài)(如w,r,r+));

      當(dāng)上面的操作成功后文件指針fp就會賦予你打開文件的最基本信息!

      FILE結(jié)構(gòu)在Turbo?C在stdio.h文件中有以下的文件類型聲明:

      typedef?struct

      {

      short?level;?????????????????/*緩沖區(qū)“滿”或“空”的程度*/

      unsigned?flags;??????????????/*文件狀態(tài)標(biāo)志*/

      char?fd;????????????????????/*文件描述符(句柄)*/

      unsigned?char?hold;??????????/*如無緩沖區(qū)不讀取字符*/

      short?bsize;?????????????????/*緩沖區(qū)的大小*/

      unsigned?char?*buffer;????????/*數(shù)據(jù)緩沖區(qū)的位置*/

      unsigned?ar?*curp;???????????/*指針,當(dāng)前的指向*/

      unsigned?istemp;????????????/*臨時(shí)文件,指示器*/

      short?token;????????????????/*用于有效性檢查*/

      }FILE;

      為管理你打開的文件,操作系統(tǒng)為所有的文件創(chuàng)建一個(gè)打開文件信息的結(jié)構(gòu)數(shù)組---文件控制塊(FCB),而文件描述符就承擔(dān)了訪問與之對應(yīng)的文件控制塊的使命,他在c中就充當(dāng)文件句柄。每一個(gè)文件都需要唯一的一個(gè)標(biāo)識,這樣才能管理若干個(gè)文件

      FCB他存貯這你所有打開文件的信息,而只有通過文件句柄才能訪問與之對應(yīng)的FCB,從而訪問你的文件.

      文件句柄,就是FCB結(jié)構(gòu)數(shù)組的下標(biāo)

      所以,通過文件指針獲得文件名的操作路線:

      FILE?*fp;

      char??fd?=?fp-fd;

      FCB?*fcb;

      char?*filiname?=?fcb[fd].filiname

      利用FCB(文件控制塊)操作的例子見:

      ;amp;kindLevel=1kindId=24655postId=40710readSg=1

      C語言中函數(shù)指針用法

      函數(shù)在內(nèi)存中有一個(gè)物理位置,而這個(gè)位置是可以賦給一個(gè)指針的。一零點(diǎn)函數(shù)的地址就是該函數(shù)的入口點(diǎn)。因此,函數(shù)指針可被用來調(diào)用一個(gè)函數(shù)。函數(shù)的地址是用不帶任何括號或參數(shù)的函數(shù)名來得到的。(這很類似于數(shù)組地址的得到方法,即,在只有數(shù)組名而無下標(biāo)是就得到數(shù)組地址。)

      怎樣說明一個(gè)函數(shù)指針變量呢 ?

      為了說明一個(gè)變量 fn_pointer 的類型是"返回值為 int 的函數(shù)指針", 你可以使用下面的說明語句:

      int (*fn_pointer) ();

      為了讓編譯器能正確地解釋這句語句, *fn_pointer 必須用括號圍起來。若漏了這對括號, 則:

      int *fn_pointer ();

      的意思完全不同了。fn_pointer 將是一個(gè)函數(shù)名, 其返回值為 int 類型的指針。

      2:函數(shù)指針變量

      在C語言中規(guī)定,一個(gè)函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū), 而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。 我們可以把函數(shù)的這個(gè)首地址 ( 或稱入口地址 ) 賦予一個(gè)指針變量, 使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調(diào)用這個(gè)函數(shù)。我們把這種指向函數(shù)的指針變量稱為 " 函數(shù)指針變量 " 。

      函數(shù)指針變量定義的一般形式為:

      類型說明符 (* 指針變量名 )();

      其中 " 類型說明符 " 表示被指函數(shù)的返回值的類型。 "(* 指針變量名 )" 表示 "*" 后面的變量是定義的指針變量。 最后的空括號表示指針變量所指的是一個(gè)函數(shù)。

      例如: int (*pf)();

      表示 pf 是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值 ( 函數(shù)值 ) 是整型。

      下面通過例子來說明用指針形式實(shí)現(xiàn)對函數(shù)調(diào)用的方法。

      int max(int a,int b)

      {

      if(ab)return a;

      else return b;

      }

      main()

      {

      int max(int a,int b);

      int(*pmax)();

      int x,y,z;

      pmax=max;

      printf("input two numbers:/n");

      scanf("%d%d",x,y);

      z=(*pmax)(x,y);

      printf("maxmum=%d",z);

      }

      從上述程序可以看出用,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下:

      1. 先定義函數(shù)指針變量,如后一程序中第 9 行 int (*pmax)(); 定義 pmax 為函數(shù)指針變量。

      2. 把被調(diào)函數(shù)的入口地址 ( 函數(shù)名 ) 賦予該函數(shù)指針變量,如程序中第 11 行 pmax=max;

      3. 用函數(shù)指針變量形式調(diào)用函數(shù),如程序第 14 行 z=(*pmax)(x,y); 調(diào)用函數(shù)的一般形式為: (* 指針變量名 ) ( 實(shí)參表 ) 使用函數(shù)指針變量還應(yīng)注意以下兩點(diǎn):

      a. 函數(shù)指針變量不能進(jìn)行算術(shù)運(yùn)算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個(gè)整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而函數(shù)指針的移動是毫無意義的。

      b. 函數(shù)調(diào)用中 "(* 指針變量名 )" 的兩邊的括號不可少,其中的 * 不應(yīng)該理解為求值運(yùn)算,在此處它只是一種表示符號。

      3:指針型函數(shù)

      前面我們介紹過,所謂函數(shù)類型是指函數(shù)返回值的類型。 在C語言中允許一個(gè)函數(shù)的返回值是一個(gè)指針 ( 即地址 ) ,這種返回指針值的函數(shù)稱為指針型函數(shù)。

      定義指針型函數(shù)的一般形式為:

      類型說明符 * 函數(shù)名 ( 形參表 )

      {

      …… /* 函數(shù)體 */

      }

      其中函數(shù)名之前加了 "*" 號表明這是一個(gè)指針型函數(shù),即返回值是一個(gè)指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。

      如:

      int *ap(int x,int y)

      {

      …… /* 函數(shù)體 */

      }

      表示 ap 是一個(gè)返回指針值的指針型函數(shù), 它返回的指針指向一個(gè)整型變量。下例中定義了一個(gè)指針型函數(shù) day_name ,它的返回值指向一個(gè)字符串。該函數(shù)中定義了一個(gè)靜態(tài)指針數(shù)組 name 。 name 數(shù)組初始化賦值為八個(gè)字符串,分別表示各個(gè)星期名及出錯(cuò)提示。形參 n 表示與星期名所對應(yīng)的整數(shù)。在主函數(shù)中, 把輸入的整數(shù) i 作為實(shí)參, 在 printf 語句中調(diào)用 day_name 函數(shù)并把 i 值傳送給形參 n 。 day_name 函數(shù)中的 return 語句包含一個(gè)條件表達(dá)式, n 值若大于 7 或小于 1 則把 name[0] 指針返回主函數(shù)輸出出錯(cuò)提示字符串 "Illegal day" 。否則返回主函數(shù)輸出對應(yīng)的星期名。主函數(shù)中的第 7 行是個(gè)條件語句,其語義是,如輸入為負(fù)數(shù) (i0) 則中止程序運(yùn)行退出程序。 exit 是一個(gè)庫函數(shù), exit(1) 表示發(fā)生錯(cuò)誤后退出程序, exit(0) 表示正常退出。

      應(yīng)該特別注意的是函數(shù)指針變量和指針型函數(shù)這兩者在寫法和意義上的區(qū)別。如 int(*p)() 和 int *p() 是兩個(gè)完全不同的量。 int(*p)() 是一個(gè)變量說明,說明 p 是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值是整型量, (*p) 的兩邊的括號不能少。

      int *p() 則不是變量說明而是函數(shù)說明,說明 p 是一個(gè)指針型函數(shù),其返回值是一個(gè)指向整型量的指針,*p 兩邊沒有括號。作為函數(shù)說明, 在括號內(nèi)最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。 對于指針型函數(shù)定義,int *p() 只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。

      main()

      {

      int i;

      char *day_name(int n);

      printf("input Day No:/n");

      scanf("%d",i);

      if(i0) exit(1);

      printf("Day No:%2d--%s/n",i,day_name(i));

      }

      char *day_n

      ame(int n)

      {

      static char *name[]={ "Illegal day",

      "Monday",

      "Tuesday",

      "Wednesday",

      "Thursday",

      "Friday",

      "Saturday",

      "Sunday"};

      return((n1||n7) ? name[0] : name[n]);

      }

      本程序是通過指針函數(shù),輸入一個(gè) 1 ~ 7 之間的整數(shù), 輸出對應(yīng)的星期名。指針數(shù)組的說明與使用一個(gè)數(shù)組的元素值為指針則是指針數(shù)組。指針數(shù)組是一組有序的指針的集合。指針數(shù)組的所有元素都必須是具有相同存儲類型和指向相同數(shù)據(jù)類型的指針變量。

      指針數(shù)組說明的一般形式為: 類型說明符 * 數(shù)組名 [ 數(shù)組長度 ]

      其中類型說明符為指針值所指向的變量的類型。例如: int *pa[3] 表示 pa 是一個(gè)指針數(shù)組,它有三個(gè)數(shù)組元素, 每個(gè)元素值都是一個(gè)指針,指向整型變量。通常可用一個(gè)指針數(shù)組來指向一個(gè)二維數(shù)組。 指針數(shù)組中的每個(gè)元素被賦予二維數(shù)組每一行的首地址,因此也可理解為指向一個(gè)一維數(shù)組。圖 6—6 表示了這種關(guān)系。

      int a[3][3]={1,2,3,4,5,6,7,8,9};

      int *pa[3]={a[0],a[1],a[2]};

      int *p=a[0];

      main()

      {

      int i;

      for(i=0;i3;i++)

      printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));

      for(i=0;i3;i++)

      printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));

      }

      本例程序中, pa 是一個(gè)指針數(shù)組,三個(gè)元素分別指向二維數(shù)組 a 的各行。然后用循環(huán)語句輸出指定的數(shù)組元素。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由于 p 與 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值。讀者可仔細(xì)領(lǐng)會元素值的各種不同的表示方法。 應(yīng)該注意指針數(shù)組和二維數(shù)組指針變量的區(qū)別。 這兩者雖然都可用來表示二維數(shù)組,但是其表示方法和意義是不同的


      文章題目:c語言通過指針獲取函數(shù)名 c語言 取指針
      轉(zhuǎn)載注明:http://ef60e0e.cn/article/dopigcs.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        衡东县| 小金县| 怀集县| 固始县| 周宁县| 伊川县| 芜湖县| 勐海县| 高邮市| 荃湾区| 长海县| 惠州市| 邓州市| 毕节市| 沁阳市| 米脂县| 襄樊市| 都安| 新蔡县| 台湾省| 固安县| 浙江省| 克东县| 玉山县| 金湖县| 航空| 上饶市| 大洼县| 虎林市| 阿巴嘎旗| 定安县| 黄浦区| 凤冈县| 屯门区| 虹口区| 鸡东县| 刚察县| 兰溪市| 东乡族自治县| 且末县| 衡阳县|