【发布时间】:2016-05-12 14:52:06
【问题描述】:
假设我有以下代码:
#include <iostream>
using namespace std;
int defaultvalue[] = {1,2};
int fun(int * arg = defaultvalue)
{
arg[0] += 1;
return arg[0];
}
int main()
{
cout << fun() << endl;
cout << fun() << endl;
return 0;
}
结果是:
2
3
这是有道理的,因为指针 *arg 操纵了数组 defaultvalue。但是,如果我将代码更改为:
#include <iostream>
using namespace std;
int defaultvalue[] = {1,2};
int fun(int arg[] = defaultvalue)
{
arg[0] += 1;
return arg[0];
}
int main()
{
cout << fun() << endl;
cout << fun() << endl;
return 0;
}
但结果还是:
2
3
此外,当我打印出defaultvalue:
cout << defaultvalue[0] <<endl;
原来是 3。
我的问题是,在第二个例子中,函数参数是否应该按值传递,这样arg的变化对defaultvalue没有影响?
【问题讨论】:
-
作为函数参数类型,
int*和int[]完全相同。 -
*arg不是指针。
标签: c++ parameter-passing