天天看點

2-3:C++快速入門之預設參數

文章目錄

    • (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-3:C++快速入門之預設參數

(2)預設參數的分類

A:全預設參數

全預設參數就是所有形參都被設定了預設值

如果設定為全預設參數,從左向右,傳入對應位置實參的形參采用實參的值,沒有傳入的采用預設值。

2-3:C++快速入門之預設參數

B:半預設參數

簡單說:形參清單(從左向右)隻能有“非預設-非預設-預設”這樣的情況,不能出現“非預設-預設-非預設”或者“預設-非預設”等情況

設定為半預設參數後,對應位置依次必須傳入對應的實參。

2-3:C++快速入門之預設參數

(3)注意事項

  1. 預設參數不能在聲明和定義中同時出現,因為如果出現下面的這種情況,就産生了歧義了(這一點非常重要,很多人總是忘記)
//a.h
void Test(int a=10)
//a.c
void Test(int a=20)
           
  1. 預設值必須是常量或全局變量
  2. 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個
}
           

繼續閱讀