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有効な場所ではない可能性があり、セグメンテーション違反が発生する可能性があるため)。

あなたの質問の動機(およびユースケース)が実際にはわかりません。

ヒープに 10 個の int を割り当てたいと思うかもしれません。次にコード

int *ptr = new int[10];

それらを初期化することを忘れないでください。memset (ptr, 0, sizeof(int)*10);

Linux システムでは、valgrindg++ -Wall -g使用してコンパイルし、プログラムをデバッグすることを強くお勧めします。あなたは本当にこれらのツールを知りたいです。gdb

于 2012-10-04T12:23:11.227 に答える
0
于 2012-10-04T12:32:34.763 に答える
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 に答える