二級C語言考試輔導(dǎo)教程第六章:指針[5]

字號:

從以上幾點可以看出字符串指針變量與字符數(shù)組在使用時的區(qū)別,同時也可看出使用指針變量更加方便。前面說過,當(dāng)一個指針變量在未取得確定地址前使用是危險的,容易引起錯誤。但是對指針變量直接賦值是可以的。因為C系統(tǒng)對指針變量賦值時要給以確定的地址。因此,
     char *ps="C Langage";
     或者 char *ps;
     ps="C Language";都是合法的。
     函數(shù)指針變量
     在C語言中規(guī)定,一個函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū), 而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。 我們可以把函數(shù)的這個首地址(或稱入口地址)賦予一個指針變量, 使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調(diào)用這個函數(shù)。 我們把這種指向函數(shù)的指針變量稱為“函數(shù)指針變量”。 來源:www.examda.com
     函數(shù)指針變量定義的一般形式為:
     類型說明符 (*指針變量名)();
     其中“類型說明符”表示被指函數(shù)的返回值的類型?!?* 指針變量名)”表示“*”后面的變量是定義的指針變量。 最后的空括號表示指針變量所指的是一個函數(shù)。
     例如: int (*pf)();
     表示pf是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值(函數(shù)值)是整型。
     下面通過例子來說明用指針形式實現(xiàn)對函數(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ù)指針變量。 來源:www.examda.com
     2. 把被調(diào)函數(shù)的入口地址(函數(shù)名)賦予該函數(shù)指針變量,如程序中第11行 pmax=max;
     3. 用函數(shù)指針變量形式調(diào)用函數(shù),如程序第14行 z=(*pmax)(x,y); 調(diào)用函數(shù)的一般形式為: (*指針變量名) (實參表)使用函數(shù)指針變量還應(yīng)注意以下兩點:
     a. 函數(shù)指針變量不能進行算術(shù)運算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而函數(shù)指針的移動是毫無意義的。
     b. 函數(shù)調(diào)用中"(*指針變量名)"的兩邊的括號不可少,其中的*不應(yīng)該理解為求值運算,在此處它只是一種表示符號。
     指針型函數(shù)
     前面我們介紹過,所謂函數(shù)類型是指函數(shù)返回值的類型。 在C語言中允許一個函數(shù)的返回值是一個指針(即地址), 這種返回指針值的函數(shù)稱為指針型函數(shù)。
     定義指針型函數(shù)的一般形式為:
     類型說明符 *函數(shù)名(形參表)
     {
     …… /*函數(shù)體*/
     }
     其中函數(shù)名之前加了“*”號表明這是一個指針型函數(shù),即返回值是一個指針。類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型。