将数组传递给函数而不改变它的值?

时间:2014-04-12 09:05:53

标签: c++ arrays

我想在函数B中对数组A执行某些操作。在函数B中,更改了A的某个值。我知道因为A是一个指针,所以在执行B之后它的值会被改变。因此我必须使用C作为A的副本,以确保在执行B之后A不会被更改。

我很奇怪还有其他方法我不必使用数组C吗?

5 个答案:

答案 0 :(得分:1)

如果您不想更改其值,可以创建参数const

void func( const int * intArray, size_t size) {...}

答案 1 :(得分:1)

有很多方法可以做到:

  1. 如果您使用的是C ++ 11,请使用std::array
  2. 使用std::vector<int>传递数组。您可以修改本地副本和参数数组,但不会更改。
  3. 如果您不想修改值,请将其作为const *或const引用传递给array。对于前const int *arrconst int (&arr)[10]

答案 2 :(得分:0)

或者你可以这样写:

void func (const int array[10])
{
   // you can work with you data here withot changing an array
}

答案 3 :(得分:0)

如果要将指针传递给数组并且要确保未在函数内修改数组内容,可以使用const

void DoSomething(const int * data, size_t size)

在C ++中,您可能需要考虑像std::vector这样的容器类,并且可以使用引用const 来传递它(避免使用无用且可能昂贵的矢量深度副本:

void DoSomethingCppStyle(const std::vector<int>& data)

请注意,在这种情况下,无需单独传递size参数,因为std::vector知道自己的大小(由std::vector::size()返回)。

答案 4 :(得分:0)

无法在C ++中按值传递数组。

您必须手动制作副本并且&#34;传递&#34;那个,或用包裹数组的容器替换数组,例如std::arraystd::vector