1
struct integer3_1 {
    int value3;
};

typedef struct integer3_1* intPtr;

struct integer3{
    intPtr* vPtr;
};

typedef struct integer3* intpointer3;   

int main() {
    int value = 5;
    intpointer3 intPtr3 = (intpointer3)malloc(sizeof(struct integer3));
    //(*intPtr3->vPtr)->value3 = value;
    //(*(*intPtr3).vPtr)->value3 = value;
    //(*intPtr3->vPtr)->value3 = &value;
    //(*(*intPtr3).vPtr)->value3 = &value;

return;

}

こんにちは、質問があります

intPtr3 を逆参照して、値 5 をintPtr3->vPtr->value3

いくつかの方法を試しましたが、エラー @@a が発生し続けました


第二部

//1st line
intpointer3 intPtr3 = (intpointer3)malloc(sizeof(struct integer3));
//2nd line
(*intPtr3).vPtr = (intPtr*)malloc(sizeof(intPtr));
//3rd line
*((*intPtr3).vPtr) = (intPtr)malloc(sizeof(struct integer3_1));

1) 1 行目で、intpointer3 用のストレージを割り当てますか?

2) 2 行目で、intPtr のストレージを逆参照して割り当てますか?

3) 3 行目で、何を逆参照しましたか? どのストレージを割り当てましたか?

4) 違いは何ですか

(intpointer3)malloc(sizeof(struct integer3));

malloc(sizeof(struct integer3));

?

4

2 に答える 2

0

構造integer3が次のように定義されている場合

struct integer3{
    intPtr* vPtr;
};

次に、解決策は次のようになります

intpointer3 intPtr3 = (intpointer3)malloc(sizeof(struct integer3));

intPtr3intPointer3と同じタイプinteger3 *です。したがって、最初に size のオブジェクトにスペースを割り当てる必要がありますinteger3

(*intPtr3).vPtr = (intPtr *)malloc(sizeof(intPtr));

*intPtr3型のオブジェクトを返しinteger3ます。型integer3のポインタを持っています。したがって、サイズのオブジェクトにスペースを割り当て、それをこのステートメントに割り当てる必要があります。vPtrintPtr*intPtrvPtr

*((*intPtr3).vPtr) = (intPtr)malloc(sizeof(struct integer3_1));

(*intPtr3).vPtrintPtr *と同じ型のオブジェクトを返しますinteger3_1 **。したがって、このステートメントはwhich is same*((*intPtr3).vPtr)と逆参照します。したがって、サイズのオブジェクトにスペースを割り当て、それをこのポインターに割り当てる必要があります。*(integer3_1 **)integer3_1 *struct integer3_1

(*((*intPtr3).vPtr))->value3 = value;

演算子の LHS は型->のポインターであるinteger3_1 *ため、アクセスvalue3する必要があるため、->演算子が必要です。

printf("Value is %d\n", (*((*intPtr3).vPtr))->value3);

最後の質問:

(intpointer3)malloc(sizeof(struct integer3));

malloc(sizeof(struct integer3));

最初のケースでは、割り当てられたポインターを明示intpointer3的に型キャストすることを除いて同じです。これは、 のような環境integer3 *で開発する場合に必要です。で開発する場合、これは必要ありません。C++MSVC++gcc

于 2013-04-07T09:09:05.490 に答える