如何在被调用后保留数组的原始值

How to retain original values of an array after being called?

本文关键字:数组 原始 保留 调用      更新时间:2023-10-16
  #include <iostream>
  using std::cout;
  using std::endl;
  void staticArrayInit(int[]);     
int main()
{
   int array2[3]={1,2,3};
   cout << "First call to each function:n";
   staticArrayInit(array2);
   cout << "nnSecond call to each function:n";
   staticArrayInit(array2);
   cout << endl;
   return 0;  
} 
  void staticArrayInit(int array2[])
{

static int array1[ 3 ];  
   cout << "nValues on entering staticArrayInit:n";
   for ( int i = 0; i < 3; i++ )
     cout << "array1[" << i << "] = " << array1[ i ] << "  ";
   cout << "nValues on exiting staticArrayInit:n";
    for ( int j = 0; j < 3; j++ )
      cout << "array1[" << j << "] = " 
           << ( array1[ j ] += 5 ) << "  ";
   cout << "nnValues on entering automaticArrayInit:n";
    for ( int i = 0; i < 3; i++ )
      cout << "array2[" << i << "] = " << array2[ i ] << "  ";
   cout << "nValues on exiting automaticArrayInit:n";
   for ( int j = 0; j < 3; j++ )
      cout << "array2[" << j << "] = " 
           << (array2[ j ] += array1[j]) << "  ";
} 

您可以看到,staticarrayinit将被称为两次。第一个调用后,将修改array2(1,2,3)的原始值,在第二个调用中,将显示的值是修改后的值。如何保留array2的原始值并在staticArrayInit的第二个呼叫中显示?

您不能按值传递数组内容,因此要保留原始值,您需要维护原始数组的副本,如下所述:

 #include <iostream>
 #include <cstring>
  using std::cout;
  using std::endl;
  void staticArrayInit(int[]);     
int main()
{
   int array2[3]={1,2,3};
   cout << "First call to each function:n";
   staticArrayInit(array2);
   cout << "nnSecond call to each function:n";
   staticArrayInit(array2);
   cout << endl;
   return 0;  
} 
  void staticArrayInit(int array2[])
{

static int array1[ 3 ];  
int arraycopy[sizeof(array2)];
std::copy(array2,array2+3,arraycopy);
   cout << "nValues on entering staticArrayInit:n";
   for ( int i = 0; i < 3; i++ )
     cout << "array1[" << i << "] = " << array1[ i ] << "  ";
   cout << "nValues on exiting staticArrayInit:n";
    for ( int j = 0; j < 3; j++ )
      cout << "array1[" << j << "] = " 
           << ( array1[ j ] += 5 ) << "  ";
   cout << "nnValues on entering automaticArrayInit:n";
    for ( int i = 0; i < 3; i++ )
      cout << "array2[" << i << "] = " << array2[ i ] << "  ";
   cout << "nValues on exiting automaticArrayInit:n";
   for ( int j = 0; j < 3; j++ )
      cout << "array2[" << j << "] = " 
           << (array2[ j ] += array1[j]) << "  ";
std::copy(arraycopy,arraycopy+3,array2);
}