c++ - 将数组传递给没有函数的函数,因此无论如何它都不会更改原始数组

标签 c++ arrays function

我有一个函数可以对我传递的数组执行一些魔法。但原始数组应该完好无损。不幸的是,它正在根据数组中发生的情况更改其内容。

你能帮帮我吗?

功能:

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/

相关文章:

c++ - 终止调用引发异常中止陷阱 : 6

c++ - 为什么即使给定了模板参数,ptr_fun 也会发现这种模棱两可的情况?

python - python中三维数组的输入

c++ - 如何从最大到最小组织一个数组中的前10个频繁值?

arrays - 在 TypeScript/Angular2 中将 Int 数组转换为枚举

删除高度相关的变量

c++ - 在头文件中使用私有(private)命名空间中的声明

C++线程本地计数器实现

function - 在它之外调用小部件自己的功能

javascript - AngularJS:标签内类 =""和 ng-click =""的首选顺序