Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;数组默认参数,同时使函数重载_C++_Arrays_Default Parameters - Fatal编程技术网

C++ c++;数组默认参数,同时使函数重载

C++ c++;数组默认参数,同时使函数重载,c++,arrays,default-parameters,C++,Arrays,Default Parameters,语言:C++ 我必须使函数“add”重载 “add”函数将数组[]作为参数 我写了我的代码,但它不工作 没有错误或警告,但它不会启动 我的代码有什么问题 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) { retur

语言:C++

我必须使函数“add”重载

“add”函数将数组[]作为参数

我写了我的代码,但它不工作

没有错误或警告,但它不会启动

我的代码有什么问题

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);
}
intadd(inta[],intn,intb[]
{
整数和=0;
对于(int i=0;i
当您以自己的方式(例如
inta[]
)声明类似于数组的参数时,编译器实际上会将该参数声明为指针

add
函数的三个参数重载中,第三个参数(
b
)可能是一个空指针,您不需要检查它。试图取消对空指针的引用会导致未定义的行为和可能的崩溃

如果是空指针,请不要访问
b


int-add(int*a,int-n,int*b)
{
整数和=0;
对于(int i=0;i
索引
b
,可以是
NULL
。这是未定义的行为


避免这种陷阱的一个好方法是使用
std::vector

“它不会启动”显然是对事件的错误解释。赋值是否说
A[]
是数组参数?这是误导,因为它实际上是一个指针。数组不是指针,尽早理解这一点很好。您认为传递
NULL
有什么作用?提示:这不是一个零数组。嗯。。你的意思是我必须在返回的add中删除NULL(a,n,NULL)。那么,如果没有第三个参数,我如何给b[]赋值NULL或0值呢?@HoSuk no,我的意思是你需要在函数中添加
if(b==nullptr)
检查。
int add(int a[],int n,int b[]){if(b==nullptr)for(int I=0;I
Ah,
b[i]=0是一个错误。由于您修改了代码,现在程序可以正常工作了。我真的非常感谢你的帮助。也许我必须更加努力学习。
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;
}
sum += (a[i] + b[i]);