文章目錄
-
- (1)預設參數的概念
- (2)預設參數的分類
-
- A:全預設參數
- B:半預設參數
- (3)注意事項
情境導入
有一個函數,作用是初始化數組的大小,由于不知道具體要申請多少空間,我們的常見操作是——初始化時先随便申請一定的空間,後序需要時進行增容。
void ArrayInit(int* a)
{
a=(int*)malloc(sizeof(int)*8);//由于不知道具體存儲多少個,暫時定為8個
}
int main()
{
int* a=NULL;
ArrayInit(a);
}
是以這樣的做法有點“無奈”,但是預設參數可以(C語言不支援)解決這個問題
(1)預設參數的概念
簡單點說:預設參數是指聲明或定義函數時給函數指定一個參數,且這個參數具有一個預設值,如果進行調用時傳入相應位置的實參,則形參采用實參的值,如果不傳入實參,那麼形參就會采用預設設定的那個值。
(2)預設參數的分類
A:全預設參數
全預設參數就是所有形參都被設定了預設值
如果設定為全預設參數,從左向右,傳入對應位置實參的形參采用實參的值,沒有傳入的采用預設值。
B:半預設參數
簡單說:形參清單(從左向右)隻能有“非預設-非預設-預設”這樣的情況,不能出現“非預設-預設-非預設”或者“預設-非預設”等情況
設定為半預設參數後,對應位置依次必須傳入對應的實參。
(3)注意事項
- 預設參數不能在聲明和定義中同時出現,因為如果出現下面的這種情況,就産生了歧義了(這一點非常重要,很多人總是忘記)
//a.h
void Test(int a=10)
//a.c
void Test(int a=20)
- 預設值必須是常量或全局變量
- C語言不支援
是以在開頭提到那個問題,在預設參數的幫助下就可以解決了。也就說,預設設定一個參數,如果不知道具體數組要申請多大,那麼就用預設值,然後後序動态增長即可,如果知道空間一定最大是某個值,那麼就傳入參數,将其固定為某個大小。
void ArrayInit(int* a,Seeting_number=8)
{
a=(int*)malloc(sizeof(int)*Seeting_number);
}
int main()
{
int* a=NULL;
ArrayInit(a);//預設申請8個
ArrayInit(a,100);//直接申請100個
}