2015-11-07 61 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