首页 > 解决方案 > 一个指针指向一个 NULL 指针

问题描述

来自cs50哈佛课程处理链表的代码:---我不明白的问题是当node *ptr指向数字时,它是一个空指针,for循环如何:(node *ptr = numbers; ptr! = NULL) 因为 *numbers = NULL?---

完整版代码见:https ://cdn.cs50.net/2017/fall/lectures/5/src5/list2.c

#include <cs50.h>
#include <stdio.h>

typedef struct node
{
    int number;
    struct node *next;
}
node;

int main(void)
{
    // Memory for numbers
    node *numbers = NULL;

    // Prompt for numbers (until EOF)
    while (true)
    {
        // Prompt for number
        int number = get_int("number: ");

        // Check for EOF
        if (number == INT_MAX)
        {
            break;
        }

        // Check whether number is already in list
        bool found = false;
        for (node *ptr = numbers; ptr != NULL; ptr = ptr->next)
        {
            if (ptr->number == number)
            {
                found = true;
                break;
            }


}

标签: ccs50

解决方案


如果您检查也在while循环中的其余代码,您可以numbers在共享链接上看到更改。

if (!found)
{
    // Allocate space for number
    node *n = malloc(sizeof(node));
    if (!n)
    {
        return 1;
    }

    // Add number to list
    n->number = number;
    n->next = NULL;
    if (numbers)
    {
        for (node *ptr = numbers; ptr != NULL; ptr = ptr->next)
        {
            if (!ptr->next)
            {
                ptr->next = n;
                break;
            }
        }
    }
    else
    {
        numbers = n;
    }
}

此外,它一开始并没有碰到for循环体,所以你的想法是正确的。


推荐阅读