康斯特指针浅拷贝
Const pointers shallow copy
是否可以复制
MyStruct * const * array1
自
MyStruct * array1
但只是作为一个浅层的副本?我需要对其进行排序并写回它,我也想在数组 1 中进行更改
编辑:我很愚蠢,我在 array1 上忽略了 **,然后这是有道理的。
我猜你的意思是const MyStruct * array1?
在任何情况下,您都可以使用 const_cast 来更改指针的恒常性:
const MyStruct * array1;
MyStruct * array2 = const_cast<MyStruct *>(array1);
或
const MyStruct * const array1;
MyStruct * array2 = const_cast<MyStruct *>(array1);
完全适用于问题中的结构...但是,第二个array1
替换为另一个指针parray
。
也许,即使它是结构的浅拷贝,您也将其限定为深拷贝?那么,也许,另一个答案更好。
struct MyStruct { 国际 i; int* p;};整数 j=2;MyStruct st={ 1, &j };int main() { MyStruct* parray1(&st); MyStruct* const* array1(&parray1); MyStruct * parray=new MyStruct(); parray->i = (*array1)->i; parray->p = (*array1)->p; /* 这本质上与 (*parray) = *(*array1); */ 删除阵列;}
编辑:第二个示例,如此答案的评论中所述。这里我们有一个非常量指针,我们从常量指针指针array1
连续分配指针值。
#include <iostream>
struct MyStruct {
int i;
int* p;
};
int j=2;
MyStruct st1={ 1, &j }, st2={ 2, &j };
int main() {
MyStruct* parray1[2] = {&st1, &st2};
MyStruct* const *array1(parray1);
std::cout << array1[0]->i << ' ' << array1[1]->i << 'n';
MyStruct* parray=array1[0];
parray->i = 3;
parray=array1[1];
parray->i = 4;
std::cout << array1[0]->i << ' ' << array1[1]->i << 'n';
return 0;
}
相应的输出:
1 2
3 4
在最后的评论(我认为)之后,我们对这个问题达成了共同的解释。const 数组中的指针将被复制到非 const 数组中,在那里可以重新排列它们并修改对象。
#include <iostream>
#include <algorithm>
struct MyStruct {
int i;
int* p;
};
int j=2;
MyStruct st1={ 1, &j }, st2={ 2, &j };
int main() {
MyStruct* parray1[2] = {&st1, &st2};
MyStruct* const *array1(parray1);
std::cout << array1[0]->i << ' ' << array1[1]->i << 'n';
MyStruct* parray[2];
std::copy(array1,array1+sizeof(parray)/sizeof(parray[0]),parray);
// some manipulation:
std::swap(parray[0],parray[1]);
parray[0]->i = 3;
parray[1]->i = 4;
std::cout << array1[0]->i << ' ' << array1[1]->i << 'n';
return 0;
}
新输出为:
1 2
4 3
相关文章:
- 与浅拷贝构造函数和深拷贝构造函数混淆
- 使用复制构造函数修复浅拷贝
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- 在构造函数中浅拷贝字符串数组
- 为什么移动语义与动态 mem 分配中的浅拷贝具有相同的行为
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- C++ 如何为地图创建浅拷贝构造函数
- 浅拷贝到协议缓冲区的字节字段中
- C++ 标准::字符串意外更改。我认为这个问题是关于深和浅拷贝的
- 为什么下面的类不对数组 arr 进行浅拷贝?
- 在C++中使用浅拷贝而不是引用的原因
- C++需要一个浅拷贝,但并不完全如此
- STD向量C++ - 深拷贝或浅拷贝
- 浅拷贝后追加字符指针
- 带矢量的浅拷贝
- 康斯特指针浅拷贝
- 从一个数组到另一个数组的选择性浅拷贝
- 懒惰复制-如何从浅拷贝创建深拷贝
- 静态内存分配中的浅拷贝构造函数问题
- 是否vector::push_back()进行浅拷贝&如何解决这个问题