我不明白为什么你可以改变数组内的值,而不使用引用或指针(&,*),我是一名新生,我不知道背后的原因,我希望有人可以提供一个合乎逻辑的答案,请参考下面的代码,提前谢谢您。
#include <iostream>
using namespace std;
void a(int x[]){
for(int i = 0; i < 5; i++){
x[i] += 2;
}
}
int main(){
int x[5] = {1,2,3,4,5};
a(x);
for(auto b : x){
cout << b << " ";
}
return 0;
}
在 C++ 中,函数参数从来都不是数组。当您将函数参数声明为数组时,它会自动adjusted是指向此类数组元素的指针。这些声明实际上是相同的:
void a(int x[]); // looks like an array of int of unknown bound
void a(int* x); // declaration above is adjusted to this
void a(int x[1234]); // the size is ignored completely
数组隐式转换为指向数组第一个元素的指针(这种转换称为衰减)。因此,您可以通过传递数组参数来调用不接受数组参数的函数:
int* ptr1 = x; // implicit conversion
int* ptr2 = &x[0]; // same conversion explicitly
a(x); // same conversion happens here
这两个规则(函数参数调整和数组到指针衰减)使得语法上看起来像按值传递数组的操作实际上是使用间接完成的。在函数内,您可以通过指向函数外部存在的数组的指针参数间接修改元素。
重要提示:函数参数中数组到指针的调整不适用于其他上下文。数组和指针是具有不同属性的不同类型。
另请注意:此调整不适用于复合类型的部分。例如,“指向数组的指针”类型的函数参数不会被调整为“指向指针的指针”,“对数组的引用”也不会被调整为“对指针的引用”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)