在table.hmysql 的代码中.有以下代码
typedef struct st_table_share
{
...
struct st_table_share * next, /* Link to unused shares */
**prev;
Run Code Online (Sandbox Code Playgroud)
在教科书中,我们通常都有
sometype *next, *prev;
Run Code Online (Sandbox Code Playgroud)
但在这里使用**prev而不是*prev.使用双指针的原因是什么prev?
它没有指向前一个结构,因为接下来是,它指向指向此结构的指针.
这样做的好处是它可以指向前一个结构的"下一个"成员,或者它可以指向实际的头指针本身 - 在这是列表中的第一个项目的情况下.这意味着在两种情况下删除项目都涉及"*prev = next" - 更新头指针没有特殊情况.
缺点是你不能(轻松地)使用它来向后穿过结构; 所以它真的旨在优化你只关心遍历前进但想要轻松删除任意节点的情况.