【发布时间】:2017-07-23 19:34:30
【问题描述】:
我刚开始使用C++,基础是C。通过引用了解了Call,我需要知道,如果我在网上找到了以下函数:
int insertSorted(int arr[], int n, int key, int capacity)
{
if (n >= capacity)
return n;
arr[n] = key;
return (n+1);
}
,用于插入未排序的数组,主函数中的数组会受到影响/更改吗?由于函数中的arr[] 参数不是引用变量,那么这个被调用函数的任何变化如何反映在调用函数中?如果有的话,这是正确的代码吗?我的问题基于这样一个事实,即按值调用会创建复制变量并更改它们,而按引用调用会更改实际变量本身。如果这个问题有点愚蠢,我很抱歉。
澄清这个概念的任何帮助都会很棒。
谢谢。
【问题讨论】:
-
"数组是引用" - 不,它们不是。
-
@OmidCompSCI - 不,他们不是。它们衰减为指针,指针按值传递。
-
不幸的是,要理解这一点,您还需要理解指针。指针有点像引用,但也有本质的不同:(
-
有点相关:在 C++ 中你不应该使用原始数组,而是使用
std::vector或std::array -
@AngadSingh - 你的代码相当于
int insertSorted(int *arr, int n, int key, int capacity)。所以你实际上是通过值传递一个指针。因此对指针本身的更改(例如arr = NULL)将不会反映在调用者中。但是,指针指向的事物的变化将反映。
标签: c++ pass-by-reference call-by-value