C++数组和方法
C++ array and method
我需要解释这个
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
是一个简单的参数,因此它的value
被赋予了函数,该函数实际上是原始变量的副本。这称为按值调用。无论您对函数中的变量做什么,它都只会修改本地副本,而不会修改原始变量中的变量。
nums
变量tho用作参考。(请注意,在函数签名中,术语int nums[]
等同于int* nums
。)您不是给函数赋值(副本),而是以指针的形式提供引用。这就是为什么这被称为引用调用。如果您修改这个变量,原始值就会被修改(因为您只传递了指针(实际上它不是引用))。
为了获得更多信息,我建议你看一些C++书,因为这是一个非常基本的概念,如果你想继续(用C++)编程,你必须理解它。例如,一个起点是cplusplus.com。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 复制几乎为空的数组的最快方法
- 通过JNI传递数据数组的最快方法是什么
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 数组元素打印的递归方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++数组队列实现方法错误
- 寻找一种更好的方法来表示无符号字符数组
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 创建异构顶点数据数组的可移植方法
- 打印字符数组地址的正确方法
- 还有其他方法可以在数组中写入多维数组吗?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案