如何在被调用后保留数组的原始值
How to retain original values of an array after being called?
#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);
}
相关文章:
- 将浮动的heightmap数组导出为16位原始值
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 检查反向数组是否与原始数组相同
- C++将原始字符数组存储在元组中
- 如何将数组传递给函数,以便在更改该函数中的数组值时原始数组的值不会更改?
- 从原始指针(衰减的 C 样式数组)和大小生成范围::视图
- 如何在C++中将 std::vector 移动到原始数组中
- 头文件会导致函数调用后原始数组出现问题
- 初始化std :: unique_ptr作为原始数组指针的初始化
- std::string 参数是如何从原始字符数组文本传递的
- 原始数组和 std::array 在 clang++ 和 VC++ 上的不同迭代器行为
- 使用 Python、C++ 和 pybind11 返回并传递原始 POD 指针(数组)
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 我可以使用std ::分配的分配的原始数组
- 使用 std::sort 和原始指针数组?
- 如何在C++的所有函数中编辑原始数组
- 如何在被调用后保留数组的原始值
- 排序后如何将二维数组重置为原始形式
- STL 算法 + c'tor 不再适用于指向 C 数组的原始指针,因为指向一个过去的末端
- 将数组的原始指针施放为unique_ptr