私はCの初心者で、3つの要素を持つ基本的なジェネリックリンクリストを実装しようとしています。各要素には、異なるデータ型の値— int
、char
およびが含まれますdouble
。
これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
struct node
{
void* data;
struct node* next;
};
struct node* BuildOneTwoThree()
{
struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;
head = (struct node*)malloc(sizeof(struct node));
second = (struct node*)malloc(sizeof(struct node));
third = (struct node*)malloc(sizeof(struct node));
head->data = (int*)malloc(sizeof(int));
(int*)(head->data) = 2;
head->next = second;
second->data = (char*)malloc(sizeof(char));
(char*)second->data = 'b';
second->next = third;
third->data = (double*)malloc(sizeof(double));
(double*)third->data = 5.6;
third->next = NULL;
return head;
}
int main(void)
{
struct node* lst = BuildOneTwoThree();
printf("%d\n", lst->data);
printf("%c\n", lst->next->data);
printf("%.2f\n", lst->next->next->data);
return 0;
}
最初の2つの要素に問題はありませんが、double型の値を3番目の要素に割り当てようとすると、次のエラーが発生します。«からに変換できませんdouble
double *
»。
このエラーの理由は何ですか?int
またはの場合に同じエラーが発生しないのはなぜchar
ですか?そして最も重要な質問:これを修正する方法double
、3番目の要素のデータフィールドに値を割り当てる方法は?
問題の文字列は« (double*)third->data = 5.6;
»です。
ありがとう。