0

是否可以复制

MyStruct * const * array1

MyStruct * array1

但只是作为一个浅拷贝?我需要对它进行排序并写回它,我也想要在数组 1 中进行更改

编辑:我很愚蠢,我忽略了 array1 的 ** 那么这是有道理的。

4

2 回答 2

0

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);
于 2013-10-26T07:37:04.907 回答
0

适用于问题中的结构......但是,第二个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
于 2013-10-26T07:42:26.943 回答