2015-11-07 63 views
2

中原語:C++C++陣列默認參數,同時使功能重載

我必須做出功能「添加」過載。

'add'函數具有數組a []作爲參數。

我寫了我的代碼,但它不起作用。

沒有錯誤或警告,但它不啓動。

我的代碼有什麼問題?

int add(int a[], int n, int b[]) 
{ 
    int sum = 0; 
    for (int i = 0; i < n; i++) 
     sum += (a[i] + b[i]); 
    return sum; 
} 

int add(int a[], int n=5) 
{ 
    return add(a, n, NULL); 
} 
+1

「它不開始」當然是一個不正確的事件解釋。 –

+0

該任務是否說'a []'是一個數組參數?這是誤導,因爲它確實是一個指針。數組不是指針,很早就能理解。 – juanchopanza

+0

你認爲通過'NULL'會怎樣?提示:它不是一個零數組。 – JorenHeit

回答

1

在聲明參數等在你的方式(例如int a[])陣列,則編譯器實際上聲明的參數是一個指針。

而在add函數的三參數超載中,第三個參數(b)可能是您不檢查的空指針。試圖解引用空指針導致未定義的行爲和可能的崩潰。

如果它是空指針,則不要訪問b


int add(int* a, int n, int* b) 
{ 
    int sum = 0; 
    for (int i = 0; i < n; i++) 
    { 
     if (b == nullptr) 
      sum += a[i]; 
     else 
      sum += a[i] + b[i]; 
    } 
    return sum; 
} 
+0

呃..你的意思是我必須刪除NULL中的 return add(a,n,NULL)。 那麼,如果沒有第三個參數,我如何給b值賦值NULL或0? –

+0

@HoSuk不,我的意思是你需要在函數中添加一個'if(b == nullptr)'檢查。 –

+0

'INT加載(INT一個[],整數N,INT B []) { \t如果(B == nullptr) \t \t的for(int i = 0; I

1
sum += (a[i] + b[i]); 

b索引,其可以是NULL。這是未定義的行爲。

一個很好的方法,以避免陷阱是使用std::vector