该语句的神秘代码行是什么?
What is cryptic line of code for this statement?
例如:
temp->next = NULL
等同于 (*temp).next = NULL
list->next->next = temp
等同于 ??
与(*(*list).next).next = temp
相同
这一行
list->next->next = temp;
可以用多种方式重写。例如
( *list ).next->next = temp;
或
( *( *list ).next ).next = temp;
或
( *list ->next ).next = temp;
temp->next = NULL;
(*temp).next = NULL;
这两行是等价的(将 NULL
分配给 next
的值)。不同之处在于,在第二个中,指针被取消引用 ((*temp)
),这意味着我们使用 .
而不是 ->
.
访问 属性
运算符->
是'dereference'。它专门用于使您免于通过 *
取消引用的冗长,尤其是当您经常需要括号使其按预期工作时。就这样吧。
list->next->next = temp;
这会将 temp
的值分配给 next
列表项的 next
属性。如果 list
或 list->next
不是指向有效内存位置的指针(例如 NULL
),这可能会失败。
当我说 'fail' 时,我的意思是该行为没有记录,因为您只是在重写一些可能会导致难以预测行为的内容(某些运行时会捕捉到对 NULL 的赋值)。它现在可能看起来有效,稍后会来咬你。它们可能很难找到,所以要注意 ;-)
通常,当分配给一个指针时,尤其是当以这种方式链接时,请确保您有适当的守卫 condition/context 以确保您可以相信它在做正确的事情。
if (list && list->next) {
list->next->next = temp;
} else {
// eek!
}
同
list[0].next[0].next= temp;
例如:
temp->next = NULL
等同于(*temp).next = NULL
list->next->next = temp
等同于 ??
与(*(*list).next).next = temp
这一行
list->next->next = temp;
可以用多种方式重写。例如
( *list ).next->next = temp;
或
( *( *list ).next ).next = temp;
或
( *list ->next ).next = temp;
temp->next = NULL;
(*temp).next = NULL;
这两行是等价的(将 NULL
分配给 next
的值)。不同之处在于,在第二个中,指针被取消引用 ((*temp)
),这意味着我们使用 .
而不是 ->
.
运算符->
是'dereference'。它专门用于使您免于通过 *
取消引用的冗长,尤其是当您经常需要括号使其按预期工作时。就这样吧。
list->next->next = temp;
这会将 temp
的值分配给 next
列表项的 next
属性。如果 list
或 list->next
不是指向有效内存位置的指针(例如 NULL
),这可能会失败。
当我说 'fail' 时,我的意思是该行为没有记录,因为您只是在重写一些可能会导致难以预测行为的内容(某些运行时会捕捉到对 NULL 的赋值)。它现在可能看起来有效,稍后会来咬你。它们可能很难找到,所以要注意 ;-)
通常,当分配给一个指针时,尤其是当以这种方式链接时,请确保您有适当的守卫 condition/context 以确保您可以相信它在做正确的事情。
if (list && list->next) {
list->next->next = temp;
} else {
// eek!
}
同
list[0].next[0].next= temp;