我有一个函数可以对我传递的数组执行一些魔法。但原始数组应该完好无损。不幸的是,它正在根据数组中发生的情况更改其内容。
你能帮帮我吗?
功能:
void test(int* array) {
array[0] = 1; // EDIT: Added missing line
std::cout << "Inside: " << array[0] << endl;
}
int main() {
int *testArray = new int[1];
testArray[0] = 0;
std::cout<<testArray[0]<<endl;
test(testArray);
std::cout << "Outside: " << testArray[0] << endl;
}
当前结果是:
0
Inside: 1
Outside: 1
我想要的结果:
0
Inside: 1
Outside: 0
这可能吗?
最佳答案
听起来您想按值而不是按引用传递数组。您在这里传递指向第一个元素的指针。因此,您在该函数内对该数组执行的任何更改都将反射(reflect)到原始数组。
另一个问题是您没有发布大量关于您要解决的问题的代码。我假设您想要这样的功能。
查看现场演示 here .
#include <iostream>
void test(const int* array) {
array[0]=1;
std::cout << "Inside: " << array[0] << std::endl;
}
int main() {
int *testArray = new int[1];
testArray[0] = 0;
std::cout<<testArray[0]<<std::endl;
test(testArray);
std::cout << "Outside: " << testArray[0] << std::endl;
delete[] testArray;
}
编译器会给你以下错误:
Error(s):
source_file.cpp:4:13: error: read-only variable is not assignable
array[0]=1;
~~~~~~~~^
1 error generated.
您不应该使用 new[]
在 C++ 中分配动态数组。 99% 的时间你应该使用 std::vector如果你想要 C++ 中的动态数组。
关于c++ - 将数组传递给没有函数的函数,因此无论如何它都不会更改原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44877976/