共用方式為


引數

在函式呼叫的引數會有這種形式:

expression ( expression-list <SUB>opt</SUB> )  /* Function call */

在函式呼叫中, 運算式清單是一份運算式 (以逗號分隔)。 這些第二個運算式的值是傳給函數的引數。 如果函式會不接受任何引數中, 運算式清單應該包含關鍵字void。

引數可以是任何具有基本值、 結構、 等位或指標型別。 所有引數會傳值方式傳遞。 這表示引數的複本會指派給對應的參數。 此函式並不知道實際記憶體的位置傳遞的引數。 函式會使用這個複本,而不會影響它原先衍生出的變數。

雖然您不能傳遞做為引數的陣列或函式,您可以將指標傳遞至這些項目。 指標會提供方法來存取值所參考的函式。 指標,此變數會保留變數的位址,因為函式就可以使用這個位址來存取該變數的值。 即使不能當做引數傳遞陣列和函式指標引數可讓來存取陣列和函式的函式。

不同的編譯器與不同的最佳化層級] 下,都計算的引數的順序可能會有所不同。 不過,則引數和任何副作用會完全評估在輸入函數之前。 請參閱的副作用的副作用的相關資訊。

運算式清單函式中評估呼叫,而且一般的算數轉換不會執行在函式呼叫中的每個引數。 如果使用的原型,則會將產生的引數型別相原型的對應參數。 如果兩者不相符,會執行的轉換,或是會發出診斷訊息。 參數也會經歷一般的算數轉換。

運算式中的數字運算式清單必須符合數目的參數,除非函式的原型或定義明確指定多個引數。 在此情況下,編譯器會檢查一樣多的引數是型別參數清單中的名稱,並將它們轉換,如有必要,如上文所述。 請參閱呼叫變數數字的引如需詳細資訊。

原型的參數清單中是否包含只關鍵字void,編譯器預期函式呼叫中的零個引數] 和 [定義中的零個參數。 如果找到任何引數,就會發出診斷訊息。

範例

這個範例會使用指標做為引數:

int main()
{
    /* Function prototype */

    void swap( int *num1, int *num2 );
    int x, y;
    .
    .
    .
    swap( &x, &y );  /* Function call */
}

/* Function definition */

void swap( int *num1, int *num2 )
{
    int t;

    t = *num1;
    *num1 = *num2;
    *num2 = t;
}

在這個範例中, swap函式宣告中main有兩個引數,分別由識別項num1和num2,均指向int的值。 參數num1和num2在原型樣式定義也宣告為指標int中輸入的值。

在函式呼叫

swap( &x, &y )

位址x會儲存在num1及位址的y會儲存在num2。 現在兩個名稱或 「 別名 」,有相同的位置。 References to *num1 and *num2 in swap are effectively references to x and y in main. 在工作分派swap實際上交換內容的x和y。 因此,沒有return是必要的陳述式。

編譯器會執行檢查之引數的型別swap因為原型的swap包含每個參數的引數型別。 在原型和定義的括號內的識別項可以是相同或不同。 重要的是引數的型別相符的參數清單中的原型,並定義。

請參閱

概念

函式呼叫