该语句的神秘代码行是什么?

What is cryptic line of code for this statement?

例如:

(*(*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 属性。如果 listlist->next 不是指向有效内存位置的指针(例如 NULL),这可能会失败。

当我说 'fail' 时,我的意思是该行为没有记录,因为您只是在重写一些可能会导致难以预测行为的内容(某些运行时会捕捉到对 NULL 的赋值)。它现在可能看起来有效,稍后会来咬你。它们可能很难找到,所以要注意 ;-)

通常,当分配给一个指针时,尤其是当以这种方式链接时,请确保您有适当的守卫 condition/context 以确保您可以相信它在做正确的事情。

if (list && list->next) {
  list->next->next = temp;
} else {
  // eek!
}

list[0].next[0].next= temp;