return list->next == list;这句话的疑惑

时间:2021-12-02 21:12:33
return list->next == list;

就这一句,我觉得有店疑惑,理论上来说返回的应该是比较的结果,即真或者假,0或1,但问题是list是个指针,如果list唯恐的话对list解引用程序不会挂掉吗?而这句话的作用就是判断list是否为空,也就是说肯定会出现list为空的场景,谁能解释下呢?

11 个解决方案

#1


如果list为空是会挂掉
不过这里是判断list的next是不是指向list自身,这不是判断list为空

#2


你的为空意思是说list没有其他节点吗
这时候有一个节点的,就是list指向的,所以这个指针并不是空的

#3


如果是判断list是否为空,为什么不用
if (list==NULL) return something;
单看return list->next == list;这个语句,安全起见,
在它前面应该有一个判断,即如果list==NULL,就应该返回了。

#4


是否理解错了
还是那个写程序的脑子出问题了
这明显不能存在list为空情况下
是用来判定list->next是否指向自己。

#5


VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

#6


list_empty(struct list *list)
{
return list->next == list;
}

struct list {
struct list *next, *prev;
};

#7


判断list列表是否为空列表。

#8


如果你第一个结点为头结点的话,这样判断就是判断list链表是否为空

#9


引用 6 楼 liuyang1943 的回复:
C/C++ code
list_empty(struct list *list)
{
    return list->next == list;
}

struct list {
    struct list *next, *prev;
};


判断列表是否为空 

#10


汇编不懂,汇编哥给解释一下白

#11


这可能是个单循环链表头的单链表,如果list->next == list   就说明单循环链表中没有数据。。。。而并不是当list为NULL时候,才为空

#1


如果list为空是会挂掉
不过这里是判断list的next是不是指向list自身,这不是判断list为空

#2


你的为空意思是说list没有其他节点吗
这时候有一个节点的,就是list指向的,所以这个指针并不是空的

#3


如果是判断list是否为空,为什么不用
if (list==NULL) return something;
单看return list->next == list;这个语句,安全起见,
在它前面应该有一个判断,即如果list==NULL,就应该返回了。

#4


是否理解错了
还是那个写程序的脑子出问题了
这明显不能存在list为空情况下
是用来判定list->next是否指向自己。

#5


VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

#6


list_empty(struct list *list)
{
return list->next == list;
}

struct list {
struct list *next, *prev;
};

#7


判断list列表是否为空列表。

#8


如果你第一个结点为头结点的话,这样判断就是判断list链表是否为空

#9


引用 6 楼 liuyang1943 的回复:
C/C++ code
list_empty(struct list *list)
{
    return list->next == list;
}

struct list {
    struct list *next, *prev;
};


判断列表是否为空 

#10


汇编不懂,汇编哥给解释一下白

#11


这可能是个单循环链表头的单链表,如果list->next == list   就说明单循环链表中没有数据。。。。而并不是当list为NULL时候,才为空