gpt4 book ai didi

c - 链表实现上的结构指针

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:14 24 4
gpt4 key购买 nike

我正在使用 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) cast,它会说第二个参数的类型是 double *,这让我很困惑,因为我认为 -> 符号取消引用了一个指针。

我迷路了。

最佳答案

您正在取消引用 data1data2 而没有为它们分配内存。尝试:

double data1 = 10.5;

addFront(newList, &data1);

或者你可以做一个malloc,虽然我认为你不应该在这种情况下。

另外,当你想打印它们时,试试:

printf("%f\n", *(double *)newList->head->data);

关于c - 链表实现上的结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com