return list->next == list;
就这一句,我觉得有店疑惑,理论上来说返回的应该是比较的结果,即真或者假,0或1,但问题是list是个指针,如果list唯恐的话对list解引用程序不会挂掉吗?而这句话的作用就是判断list是否为空,也就是说肯定会出现list为空的场景,谁能解释下呢?
11 个解决方案
#1
如果list为空是会挂掉
不过这里是判断list的next是不是指向list自身,这不是判断list为空
不过这里是判断list的next是不是指向list自身,这不是判断list为空
#2
你的为空意思是说list没有其他节点吗
这时候有一个节点的,就是list指向的,所以这个指针并不是空的
这时候有一个节点的,就是list指向的,所以这个指针并不是空的
#3
如果是判断list是否为空,为什么不用
if (list==NULL) return something;
单看return list->next == list;这个语句,安全起见,
在它前面应该有一个判断,即如果list==NULL,就应该返回了。
if (list==NULL) return something;
单看return list->next == list;这个语句,安全起见,
在它前面应该有一个判断,即如果list==NULL,就应该返回了。
#4
是否理解错了
还是那个写程序的脑子出问题了
这明显不能存在list为空情况下
是用来判定list->next是否指向自己。
还是那个写程序的脑子出问题了
这明显不能存在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和汇编的对应关系。”
不是一回事!
(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
判断列表是否为空
#10
汇编不懂,汇编哥给解释一下白
#11
这可能是个单循环链表头的单链表,如果list->next == list 就说明单循环链表中没有数据。。。。而并不是当list为NULL时候,才为空
#1
如果list为空是会挂掉
不过这里是判断list的next是不是指向list自身,这不是判断list为空
不过这里是判断list的next是不是指向list自身,这不是判断list为空
#2
你的为空意思是说list没有其他节点吗
这时候有一个节点的,就是list指向的,所以这个指针并不是空的
这时候有一个节点的,就是list指向的,所以这个指针并不是空的
#3
如果是判断list是否为空,为什么不用
if (list==NULL) return something;
单看return list->next == list;这个语句,安全起见,
在它前面应该有一个判断,即如果list==NULL,就应该返回了。
if (list==NULL) return something;
单看return list->next == list;这个语句,安全起见,
在它前面应该有一个判断,即如果list==NULL,就应该返回了。
#4
是否理解错了
还是那个写程序的脑子出问题了
这明显不能存在list为空情况下
是用来判定list->next是否指向自己。
还是那个写程序的脑子出问题了
这明显不能存在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和汇编的对应关系。”
不是一回事!
(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
判断列表是否为空
#10
汇编不懂,汇编哥给解释一下白
#11
这可能是个单循环链表头的单链表,如果list->next == list 就说明单循环链表中没有数据。。。。而并不是当list为NULL时候,才为空