用指针制作一个简单的积分列表

我试图用Nodes创建一个基本的积分列表(我还应该指出,我正在通过做这个练习学习指针)

typedef struct Node {
    int data;
    struct Node *next;
} Node;

但似乎并不奏效。每次我试图打印列表时,它都会显示随机值这是我的代码。

Node *head = NULL;  // The head of the list - global


void push(int d) {

    Node newNode;
    if (head == NULL)
    {
        printf("In\n");
        head = &newNode;
        (*head).data = d;
    }
    else
    {
        printf("In2");
        newNode.next = head;
        head = &newNode;
    }

void printList() {
    while (head != NULL)
    {
        printf("In while\n");
        printf("%d",(*head).data);
        head = head->next;
    }
}

当我试着做例如: push(1);printList()我得到。263958281 或任何其他随机值.有人知道为什么吗?

PS:如果我试着去做。

push(1);
push(2);
printList();

我的理想输出将是。

2 1

解决方案:

这样。

Node newNode;

在栈上分配节点。函数返回后,该节点就不存在了。

列表节点通常从堆中分配,用 malloc 函数,堆分配的内存会一直存在,直到它被显式deallocated。堆分配的内存会一直存在,直到用 free.

例如:

void push(int d) {
    Node* newNode = malloc(sizeof(Node));
    newNode->data = d;
    newNode->next = head;
    head = newNode;
}

给TA打赏
共{{data.count}}人
人已打赏
解决方案

从地图中删除没有数据的国家(rworldmap包)。

2022-5-13 1:00:17

解决方案

在字符串数组中搜索用户指定的字符

2022-5-13 1:00:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索