C 深度解析 5 函式引數的擴充套件

2021-10-02 08:35:07 字數 1758 閱讀 9683

2 函式佔位引數

3 小結

問題:函式定義中是否可以出現引數的預設值?當宣告和定義中的引數預設值不同會發生什麼?

例項分析:預設引數值初探

// 5-1.c

#include

intmul

(int x =0)

;int

main

(int argc,

char

* ar**)

intmul

(int x)

函式 mul() 在宣告時指定了引數的預設值,當沒有指定引數時使用預設值,指定引數時,使用指定值。

編譯執行結果如下:

$ g++ 5-1.c -o 5-1

$ ./5-101

4

當宣告時沒有提供預設引數,定義中提供預設引數時,會有編譯錯誤,提示。也就是第 3 行改為 int mul(int x); 第 11 行改為 int mul(int x = 0),重新編譯:

當宣告和定義中的引數預設值不同時,這裡將 5-1.c 的第 11 行改為 int mul(int x = 5),重新編譯:

所以,引數的預設值必須在函式宣告中指定

在 c++ 中可以為函式提供佔位引數

佔位引數就是乙個只有引數型別沒有引數名的引數,那麼佔位引數好像沒有什麼用呀,我們繼續向下看:

函式佔位引數的意義

先看乙個之前講過的問題,下面兩種宣告方式等價嗎?

在 c 語言中二者是不等價的,void func() 表示可以有任意多各引數,void func(void) 表示沒有引數

在 c++ 中,二者是等價的,c++ 型別檢查更嚴格,都表示函式沒有引數

在 c++ 中,為了相容 c 語言不規範的**(引數數量改變),將佔位引數和預設引數結合使用,下面看一下案例,更加直觀:

程式設計實驗:佔位引數與預設引數值

// 5-2.c

#include

intfunc

(int x,

int=0)

;int

main

(int argc,

char

* ar**)

intfunc

(int x,

int)

使用佔位引數和預設引數相結合,就可以讓 c++ 相容 c 語言的**,可以增加引數。func(1) 和 func(2, 3) 都可以執行。

1、c++ 支援函式引數的預設值,函式呼叫時沒有提供引數值則使用預設值

2、引數的預設值必須從右向左

3、函式呼叫時使用了預設值,則後續引數必須使用預設值

4、c++ 中支援佔位引數,用於相容 c 語言中的不規範寫法

C 函式引數的擴充套件

1 函式引數的預設值 c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有提供引數的址,則使用預設值 int mul int x 0 int main int argc,char ar int mul int x 引數的預設值必須在函式宣告中指定 問題 函式定義中是否可以出現引數的預設值?當...

C 基礎 函式引數擴充套件

c 中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有指定這個引數的值,編譯器會自動用預設值代替。include using namespace std void myprint int x 3 void myprint2 int x 3,int y 4 void myprint2 int x...

函式引數的擴充套件。

1 函式引數的擴充套件。1 函式引數的預設值。1 c 在函式宣告時為函式提供乙個預設的引數值。當函式呼叫沒有引數的值的時候,使用預設引數。void test int x 0 int main void test int x 2 引數預設值必須在函式宣告中指定。3 函式定義中是否可以存在引數的預設值?...