0

假设我有以下程序,

 typedef struct xyz
    {
    int abc[6];//int abc;
    //int yz;
    }xyz;
    int main()
    {
    int *ptr = new int(10);
    int *ptr1 = new int(20);

    xyz* XYZ = reinterpret_cast <xyz*>(ptr); //Initializes XYZ->abc[0]
    XYZ = reinterpret_cast <xyz*>(ptr1);//Initializes XYZ->abc[0]

    }

这里的值进入zeroth location。如果我想将值推入XYZ->abc[1],那么我该怎么做呢?

4

4 回答 4

1

也许你想做

 XYZ = reinterpret_cast<xyz*> (ptr1+1);

但是这种代码很恶心,它可能是一个未定义的行为(因为ptr1+1可能不是一个有效的位置,你可能会得到一个分段错误),所以你应该避免这样做。

我实际上不明白你的问题的动机(和用例)。

也许您想在堆上分配十个整数。然后编码

int *ptr = new int[10];

并且不要忘记初始化它们,例如memset (ptr, 0, sizeof(int)*10);

在 Linux 系统上,我强烈建议g++ -Wall -g使用valgrind进行编译和gdb调试程序。你真的很想知道这些工具。

于 2012-10-04T12:23:11.227 回答
0

您可以在不进行任何转换的情况下执行此操作:

xyz val;

val.abc[0] = 1234;
val.abc[1] = 5678;

或者如果您需要动态分配的实例:

xyz* ptr = new xyz();

ptr->abc[0] = 1234;
ptr->abc[1] = 5678;
于 2012-10-04T12:25:10.990 回答
0

简单的:

xyz XYZ;
XYZ.abc[1] = *ptr;
于 2012-10-04T12:25:25.263 回答
0
于 2012-10-04T12:32:34.763 回答