亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場(chǎng) | 考試論壇  
      全國  |             |          |          |          |          |         
        當(dāng)前位置:計(jì)算機(jī)等級(jí) > 二級(jí)考試 > C語言程序設(shè)計(jì) > C語言輔導(dǎo) > 文章內(nèi)容
        

      全國計(jì)算機(jī)等級(jí)考試二級(jí)C語言入門教程(98)

      中華IT學(xué)院   【 】  [ 2016年5月5日 ]

      函數(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ù)的返回值的類型!(* 指針變量名)”表示“*”后面的變量是定義的指針變量。 最
      后的空括號(hào)表示指針變量所指的是一個(gè)函數(shù)。
      例如: int (*pf)();
      表示 pf是一個(gè)指向函數(shù)入口的指針變量,該函數(shù)的返回值(函數(shù)值)是整型。
      下面通過例子來說明用指針形式實(shí)現(xiàn)對(duì)函數(shù)調(diào)用的方法。

      int max(int a,int b){
      if(a>b)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ù)可使指針移動(dòng)指向后面
      或前面的數(shù)組元素,而函數(shù)指針的移動(dòng)是毫無意義的。
      b. 函數(shù)調(diào)用中"(*指針變量名)"的兩邊的括號(hào)不可少,其中的*不應(yīng)該理解為求值運(yùn)算,在此處它只是一種表示符號(hào)。
      指針型函數(shù)


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


      類型說明符 *函數(shù)名(形參表)
      {
      …… /*函數(shù)體*/
      }


      其中函數(shù)名之前加了“*”號(hào)表明這是一個(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表示與星期名所對(duì)應(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ù)輸出對(duì)應(yīng)
      的星期名。主函數(shù)中的第 7行是個(gè)條件語句,其語義是,如輸入為負(fù)數(shù)(i<0)則中止程序運(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)
      的兩邊的括號(hào)不能少。int *p() 則不是變量說明而是函數(shù)說明,說明 p是一個(gè)指針型函數(shù),其返回值是一個(gè)指向整型
      量的指針,*p兩邊沒有括號(hào)。作為函數(shù)說明, 在括號(hào)內(nèi)最好寫入形式參數(shù),這樣便于與變量說明區(qū)別。 對(duì)于指針型
      函數(shù)定義,int *p()只是函數(shù)頭部分,一般還應(yīng)該有函數(shù)體部分。

      main(){
      int i;
      char *day_name(int n);
      printf("input Day No:\n");
      scanf("%d",&i);
      if(i<0) exit(1);
      printf("Day No:--->%s\n",i,day_name(i));
      }
      char *day_name(int n){
      static char *name[]={ "Illegal day",
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"};



      return((n<1||n>7) ? name[0] : name[n]);
      }

      本程序是通過指針函數(shù),輸入一個(gè)1~7之間的整數(shù), 輸出對(duì)應(yīng)的星期名。指針數(shù)組的說明與使用一個(gè)數(shù)組的元
      素值為指針則是指針數(shù)組。 指針數(shù)組是一組有序的指針的集合。 指針數(shù)組的所有元素都必須是具有相同存儲(chǔ)類型和
      指向相同數(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;i<3;i++)

      首頁 1 2 尾頁
      分享到:
      本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請(qǐng)鏈接 | 意見留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2006-2017 中華考試網(wǎng)(Examw.com) All Rights Reserved  營業(yè)執(zhí)照