while (current->num < date && current != NULL)
你指的是这个吧
这个是先算 current->num < date,然后根据计算结果看还要不要算 current != NULL,如果 current->num < date 为假,那就不算 current != NULL,如果 current->num < date 为真,那就再算 current != NULL
但是你不觉得顺序反了吗
if(current != NULL) {
if(current->num < date) {
// ...
}
}
这样先判断 current 是不是 NULL,如果不是 NULL,然后访问 current 指向的 num
if(current->num < date) {
if(current != NULL) {
// ...
}
}
这个不管 current 是不是 NULL,先访问了 current 指向的 num 再说,访问了之后再判断 current 是不是 NULL
问题是如果 current 就是 NULL,那访问的时候就会出错
如果 current 不是 NULL,那就计算 current != NULL,都不是 NULL 了,你再判断没有意义,因为 current != NULL 的结果肯定是 真,不可能是假,如果是假的话,程序在 current->num < date,这里因为空指针解引用,程序就停止运行了,不可能还会执行 current != NULL,这个判断没有任何意义,因为这个 current != NULL,的结果一定是真,不可能是假