についての詳細については、スタックを混乱させてください、The C Programming Language (K&R)
とThe C++ Programming Language (Stroustrup)
のような本。私は何を学んだのですか?そのvoid*
は、推論された型のない汎用ポインタです。任意の定義されたタイプへのキャストが必要で、void*
の印刷だけでアドレスが得られます。もう一つのvoid * topic;私は混乱しているので尋ねる必要があります
他に何を知っていますか? void*
は逆参照することはできません。これまでのところ、多くの書面が見つかりましたが、ほとんど理解できなかったことが発見されたC/C++
の項目の1つです。
*(char*)void*
のようにキャストする必要があることを理解していますが、generic
ポインタの意味がわからないということは、値を取得するためにどのようなタイプが必要なのかということです。私はJavaプログラマです。私はジェネリック型を理解していますが、これは私が苦労しているものです。
だから、私は、後にメモリ解放を処理しますいくつかのコード
typedef struct node
{
void* data;
node* link;
}Node;
typedef struct list
{
Node* head;
}List;
Node* add_new(void* data, Node* link);
void show(Node* head);
Node* add_new(void* data, Node* link)
{
Node* newNode = new Node();
newNode->data = data;
newNode->link = link;
return newNode;
}
void show(Node* head)
{
while (head != nullptr)
{
std::cout << head->data;
head = head->link;
}
}
int main()
{
List list;
list.head = nullptr;
list.head = add_new("My Name", list.head);
list.head = add_new("Your Name", list.head);
list.head = add_new("Our Name", list.head);
show(list.head);
fgetc(stdin);
return 0;
}
を書きました。 void*
に格納されている型がわからないと仮定して、どのように値を取得するのですか? Thisは既にタイプを知る必要があることを暗示していますが、は、void*
という一般的な性質については何も明らかにしていませんが、まだ理解していませんが、hereです。
なぜ私はvoid*
が協力して、ヒープやスタックの一部のレジスタに内部的に隠されている型を自動的にキャストすることを期待していますか?
私は 'void *'の使用は次のようだと考えています:WindowのCWndクラスは 'void * data'を保持できます。このデータが何であるかを知りませんし、気にもなりません。この「データ」は何もしません。単にそれを保持しています。一方、私のコードは私の 'thingamabob'をこの' data'に格納することができます。私のコードは、 'data'は常に' thingamabob'を保持していると仮定しています。これは、 'data'メンバにアクセスするコードが自分のコードだけであるからです。私のコードは型を知っていますが、 'CWnd'は型を知っていません。 –