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 函式定義中是否可以存在引數的預設值?...