c - 一个指针指向一个 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;
}
}
解决方案
如果您检查也在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
循环体,所以你的想法是正确的。
推荐阅读
- excel - Excel VBA:4 个独立运行良好的子程序,但在组合时 - 代码给出了意想不到的结果
- emacs - org-agenda-prefix-format 中的 %s 不在 TODO 视图中显示日期
- java - 如何使用apache poi并排添加图像
- c# - 是否可以在 Webbrowser 中显示 .net 控件内容
- java - 如何正确附加到 JTextPane
- php - Laravel 单元测试
- sql - 如何匹配 SQL 中的数据(覆盖率)
- progress-4gl - 进度 Openedge 语法将数组数据从 url 读回临时表
- php - PHP命名空间初始化后返回全局命名空间
- c# - 如何在 C# 中动态获取函数形式参数的列表?