全國計算機二級考試輔導:C語言之函數(shù)(2)

字號:

函數(shù)的值是指函數(shù)被調(diào)用之后, 執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。如調(diào)用正弦函數(shù)取得正弦值,調(diào)用例5.1的max函數(shù)取得的數(shù)等。對函數(shù)的值(或稱函數(shù)返回值)有以下一些說明:
    1. 函數(shù)的值只能通過return語句返回主調(diào)函數(shù)。return 語句的一般形式為:
    return 表達式;
    或者為:
    return (表達式);
    該語句的功能是計算表達式的值,并返回給主調(diào)函數(shù)。 在函數(shù)中允許有多個return語句,但每次調(diào)用只能有一個return 語句被執(zhí)行, 因此只能返回一個函數(shù)值。
    2. 函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應保持一致。 如果兩者不一致,則以函數(shù)類型為準,自動進行類型轉(zhuǎn)換。
    3. 如函數(shù)值為整型,在函數(shù)定義時可以省去類型說明。
    4. 不返回函數(shù)值的函數(shù),可以明確定義為“空類型”, 類型說明符為“void”。如例5.3中函數(shù)s并不向主函數(shù)返函數(shù)值,因此可定義為:
    void s(int n)
    { ……
    }
    一旦函數(shù)被定義為空類型后, 就不能在主調(diào)函數(shù)中使用被調(diào)函數(shù)的函數(shù)值了。例如,在定義s為空類型后,在主函數(shù)中寫下述語句 sum=s(n); 就是錯誤的。為了使程序有良好的可讀性并減少出錯, 凡不要求返回值的函數(shù)都應定義為空類型。函數(shù)說明在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應對該被調(diào)函數(shù)進行說明, 這與使用變量之前要先進行變量說明是一樣的。 在主調(diào)函數(shù)中對被調(diào)函數(shù)作說明的目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類型, 以便在主調(diào)函數(shù)中按此種類型對返回值作相應的處理。 對被調(diào)函數(shù)的說明也有兩種格式,一種為傳統(tǒng)格式,其一般格式為: 類型說明符 被調(diào)函數(shù)名(); 這種格式只給出函數(shù)返回值的類型,被調(diào)函數(shù)名及一個空括號。
    這種格式由于在括號中沒有任何參數(shù)信息, 因此不便于編譯系統(tǒng)進行錯誤檢查,易于發(fā)生錯誤。另一種為現(xiàn)代格式,其一般形式為:
    類型說明符 被調(diào)函數(shù)名(類型 形參,類型 形參…);
    或為:
    類型說明符 被調(diào)函數(shù)名(類型,類型…);
    現(xiàn)代格式的括號內(nèi)給出了形參的類型和形參名, 或只給出形參類型。這便于編譯系統(tǒng)進行檢錯,以防止可能出現(xiàn)的錯誤。例5.1 main函數(shù)中對max函數(shù)的說明若
    用傳統(tǒng)格式可寫為:
    int max();
    用現(xiàn)代格式可寫為:
    int max(int a,int b);
    或?qū)憺?
    int max(int,int);
    C語言中又規(guī)定在以下幾種情況時可以省去主調(diào)函數(shù)中對被調(diào)函數(shù)的函數(shù)說明。
    1. 如果被調(diào)函數(shù)的返回值是整型或字符型時, 可以不對被調(diào)函數(shù)作說明,而直接調(diào)用。這時系統(tǒng)將自動對被調(diào)函數(shù)返回值按整型處理。例5.3的主函數(shù)中未對函數(shù)s作說明而直接調(diào)用即屬此種情形。
    2. 當被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時, 在主調(diào)函數(shù)中也可以不對被調(diào)函數(shù)再作說明而直接調(diào)用。例如例5.1中, 函數(shù)max的定義放在main 函數(shù)之前,因此可在main函數(shù)中省去對 max函數(shù)的函數(shù)說明int max(int a,int b)。
    3. 如在所有函數(shù)定義之前, 在函數(shù)外預先說明了各個函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不再對被調(diào)函數(shù)作說明。例如:
    char str(int a);
    float f(float b);
    main()
    {
    ……
    }
    char str(int a)
    {
    ……
    }
    float f(float b)
    {
    ……
    }
    其中第一,二行對str函數(shù)和f函數(shù)預先作了說明。 因此在以后各函數(shù)中無須對str和f函數(shù)再作說明就可直接調(diào)用。
    4. 對庫函數(shù)的調(diào)用不需要再作說明, 但必須把該函數(shù)的頭文件用include命令包含在源文件前部。數(shù)組作為函數(shù)參數(shù)數(shù)組可以作為函數(shù)的參數(shù)使用,進行數(shù)據(jù)傳送。 數(shù)組用作函數(shù)參數(shù)有兩種形式,一種是把數(shù)組元素(下標變量)作為實參使用; 另一種是把數(shù)組名作為函數(shù)的形參和實參使用。一、數(shù)組元素作函數(shù)實參數(shù)組元素就是下標變量,它與普通變量并無區(qū)別。 因此它作為函數(shù)實參使用與普通變量是完全相同的,在發(fā)生函數(shù)調(diào)用時, 把作為實參的數(shù)組元素的值傳送給形參,實現(xiàn)單向的值傳送。