是否可以复制
MyStruct * const * array1
至
MyStruct * array1
但只是作为一个浅拷贝?我需要对它进行排序并写回它,我也想要在数组 1 中进行更改
编辑:我很愚蠢,我忽略了 array1 的 ** 那么这是有道理的。
是否可以复制
MyStruct * const * array1
至
MyStruct * array1
但只是作为一个浅拷贝?我需要对它进行排序并写回它,我也想要在数组 1 中进行更改
编辑:我很愚蠢,我忽略了 array1 的 ** 那么这是有道理的。
I guess you mean const MyStruct * array1?
In any case you can use const_cast to change constness of a pointer:
const MyStruct * array1;
MyStruct * array2 = const_cast<MyStruct *>(array1);
Or
const MyStruct * const array1;
MyStruct * array2 = const_cast<MyStruct *>(array1);
适用于问题中的结构......但是,第二个array1
替换为另一个指针parray
。
也许,即使它是结构的浅拷贝,您也可以将其定义为深拷贝?那么,也许,另一个答案更好。
结构我的结构{ 诠释我; 诠释* p; }; 诠释 j = 2; MyStruct st={ 1, &j }; int main() { MyStruct* parray1(&st); MyStruct* const* array1(&parray1); MyStruct * parray=new MyStruct(); 数组->i = (*array1)->i; 阵列->p = (*array1)->p; /* 这本质上是一样的 (*数组) = *(*数组1); */ 删除阵列; }
编辑:此答案的评论中讨论的第二个示例。在这里,我们有一个非常量指针,我们从 const 指针指针中连续分配指针值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 数组中的指针将被复制到一个非常量数组中,在该数组中可以重新排列它们并且可以修改对象。
#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