学习和使用单链表时,避不开判断链表是否有下一个结点,非常容易碰到这个经典bug: ‘member access within null pointer of type 'struct listnode’。 错误写法:if (aim->next == NULL) if (aim->next == NULL&&aim) 正确写法:if (aim&&aim->next == NULL) 原因: aim是一个指向链表结点的指针,可能为空(虽然你确定它不为空,但编译器可不知道),所以不能直接去访问aim->next,会出现空指针警告; 其次 if 判断语句执行从左至右,所以应当先判断aim非空,才能去访问aim->next,进而判断next是否存在;