使用引用与指针将数组作为参数传递
Passing an array as a parameter using a reference vs a pointer
我正在尝试学习如何使用视频课程使用指针和参考,我发现指针和参考非常复杂。
我正在尝试做一个非常基本的练习,以便了解它的工作原理。它看起来像这样:
void print(int &array, int size)
{
for (int i = 0; i < size; i++)
{
cout << array[i] << " ";
}
}
int main()
{
int n, a[10];
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
print(a, 5);
return 0;
}
它不起作用,因为我正在传递一个数组作为引用。如果我将函数原型更改为此
void print(int *array, int size)
它完美地工作。
谁能解释我为什么?我认为在这种情况下使用指针或引用应该是相同的。两者都会导致数组。我错了吗?
int &array
类型将array
声明为对单个int
变量的引用,而不是对int
元素数组的引用。
它与指针一起使用的原因是数组自然衰减到指向其第一个元素的指针。 即当你传递a
时,你真正传递的是&a[0]
,它是int*
类型。
按值传递意味着将给定的参数复制到具有参数名称的变量。然后可以在函数中访问此变量。因此,当您执行以下操作时:
void MyFunction(int* myptr);
真正传递的是指针的副本。也就是说,它将作为参数给出的指针的值(它持有的地址(复制到 myptr。然后,复制指针访问该地址处的值,该值与原始指针指向的值相同。 因此,当您执行此操作时:
void print(int* array, int size);
真正传递的是第一个元素的地址副本。当你声明一个这样的数组时:
int array[20];
该数组实际上是一个指针,因此,如果您将其称为:
*array
那么它将与
:array[0]
按引用传递意味着传递的值引用与原始值相同的内存位置。
int print(int& array, int size)
此函数只接受一个 int 值(而不是数组(,并且该函数可以自由修改该值,因为这些更改将影响调用方函数中的原始变量。
我希望这能澄清其中的区别。
相关文章:
- 堆栈和队列是否像C++中的数组一样传递?
- C++函数模板需要 &for 数组参数
- 如何正确使用 fstream 并在 char 数组中传递数据?
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 将数组正确传递给函数 C++
- 将动态数组/矩阵传递给函数进行初始化
- 如何将结构数组从 c++ 传递到 c#?
- 将字节数组从 C++ 传递到 Python
- 2D数组值像数组一样传递,0不打印
- std::string 参数是如何从原始字符数组文本传递的
- C++ 数组参数不起作用
- 使用 C++/CLI 包装器将 2D 数组从 C# 传递到非托管C++
- 使用数组参数进行函数专用化
- 将 2d 数组从 c++ 传递到 qml
- 为什么我的数组参数的方法无法正常工作?(C )
- 使用SWIG Directors将数组从C 传递到Java
- 将数组指针传递到函数时出错
- pthread_create将动态矢量数组中传递到参数中
- C++将数组参数传递给函数
- 通过引用传递数组参数