Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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 - Fatal编程技术网

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:你说得对,谢谢你指出这一点。当然,我不是指引用,但我想在以后使用命名“通过引用调用”时使用该术语。我编辑了我的答案。