ポインターと構造体のコツをつかむために、Cでリンクリストの実装に取り組んでいます。LLデータ構造の基本的なコードは次のとおりです。
struct Node {
void *data;
struct Node *next;
};
struct List {
struct Node *head;
};
void initList(struct List *list) {
list->head = 0;
}
struct Node *addFront(struct List *list, void *data) {
struct Node *newNode;
newNode->data = data;
newNode->next = list->head;
list->head = newNode;
return newNode;
}
これが私がint main()
関数で実行したテストです:
int main() {
/* test addFront */
double *data1;
double *data2;
*data1 = 10.5;
*data2 = 10.7;
struct List *newList;
initList(newList);
addFront(newList, data1);
printf("%s\n", newList->head->data);
addFront(newList, data2);
printf("%s\n", newList->head->data);
return 0;
}
私の問題は、printfが出力を印刷していないことです。現在のところ、%sがdoubleのデータ型と一致しないため、明らかに印刷されません。文字列形式を%dに変更すると、セグメンテーション違反が発生します。->
(double)キャストを追加すると、2番目の引数の型がdouble *であると表示されます。これは、表記がポインターを逆参照していると思ったため、混乱します。
道に迷いました。