C++ C++;数组与方法
我需要解释一下C++ C++;数组与方法,c++,arrays,C++,Arrays,我需要解释一下 void m(int, int[]); int main() { int x = 1; int y[10]; y[0] = 1; m (x, y) cout >> x >> endl; cout >> y >> endl; return 0; } void m (int num, int nums[]) { num = 100; nums[0] = 10
void m(int, int[]);
int main()
{
int x = 1;
int y[10];
y[0] = 1;
m (x, y)
cout >> x >> endl;
cout >> y >> endl;
return 0;
}
void m (int num, int nums[])
{
num = 100;
nums[0] = 1000;
}
x和y的输出为
x仍然是1,但y被替换为1000
我不知道为什么会这样
为什么整数数组y[0]被替换,而整数x仍然是1?确定让我们看一下:
void m (int num, int nums[])
{
num = 100;
nums[0] = 1000;
}
(以下解释已简化。)
您可以看到,num
是一个简单的参数,因此它的值
被赋予函数,函数实际上是原始变量的副本。这称为按值调用。无论您如何处理函数中的变量,它都只会修改本地副本,而不会修改原始变量中的变量
nums
变量tho用作参考。(请注意,在函数签名中,术语int nums[]
等同于int*nums
)您不是给函数赋值(副本),而是给函数一个指针形式的引用。这就是为什么称之为引用调用。如果修改此变量,则会修改原始值(因为您只传递了指针(实际上它不是引用))
<> >为了获得更多信息,我建议您看一些C++书籍,因为这是一个非常基本的概念,如果您想继续编程(用C++),您必须理解它。例如,如果你要学习C++,你就必须开始使用标准库容器,而不是C风格的固定长度数组。另外,你的值是通过的,所以变化是局部的。你从C++学习的什么书不解释这个?<代码> M(x,y)cOUT/CODE>是语法错误。请检查你已经发布了你正在编译的确切代码。“你没有给函数提供一个拷贝(一个拷贝),而是一个引用”,实际上,指针在C++指针和引用中是两个非常不同的东西。而且cplusplus.com不是一个很好的推荐网站。谢谢。我完全是C++的新手,所以我可能错过了这个重要的一点:D@NeilButterworth:你说得对,谢谢你指出这一点。当然,我不是指引用,但我想在以后使用命名“通过引用调用”时使用该术语。我编辑了我的答案。