1

一般的なリンクリストを実装しようとしています。ノードの構造は次のとおりです -

typedef struct node{
        void *data;
        node *next;      
};

ここで、アドレスをデータに割り当てようとすると、たとえば int のように -

int n1=6;
node *temp;
temp = (node*)malloc(sizeof(node));
temp->data=&n1;

ノードから n1 の値を取得するにはどうすればよいですか? 私が言うなら -

cout<<(*(temp->data));

わかった -

`void*' is not a pointer-to-object type 

int のアドレスを割り当てると、void ポインターは int ポインター型に型キャストされませんか?

4

4 に答える 4

10

void*最初にを実際の有効な型のポインター (例: ) に型キャストしint*て、逆参照するメモリの量をコンパイラに伝える必要があります。

于 2012-05-16T08:49:56.083 に答える
4

void ポインターは逆参照できません。適切な非 void ポインター型にキャストする必要があります。この場合、int*

cout << *static_cast<int*>(temp->data);

これは C++ であるため、C スタイルのキャストではなく、C++ のキャストを使用する必要があります。mallocまた、C++ などでは使用しないでください。

于 2012-05-16T08:50:08.600 に答える
0

temp->data を int に型キャストしてから出力します。

cout<<*((int *)temp->data);
于 2012-05-16T09:09:14.237 に答える