我正在研究 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 与双精度数据类型不匹配。如果我将字符串格式更改为 %d,则会出现分段错误。如果我添加一个(双)强制转换,它表示第二个参数的类型为 double *,这让我感到困惑,因为我认为该->
符号取消引用了一个指针。
我迷路了。