C 何时使用双指针?

C 何时使用双指针?,c,pointers,data-structures,C,Pointers,Data Structures,我看到了将树转换为镜像的工作代码 struct node* mir(struct node *root) { if(root) { struct node * temp; mir(root->left); mir(root->right); temp=root->left; root->left=root->right; root->right=temp; } 不应该有链接列表中的mir(st

我看到了将树转换为镜像的工作代码

struct node* mir(struct node *root)
{
    if(root)
    {

    struct node * temp;
    mir(root->left);
    mir(root->right);
    temp=root->left;
    root->left=root->right;
    root->right=temp;
}

不应该有链接列表中的mir(struct node**)吗?

C中的所有调用都是按值调用的,这意味着调用的函数不能更改调用方上下文中参数的值。被调用的函数只接收参数的一个副本。但是,通过将指针传递到变量,然后修改其取消引用状态,可以有效地绕过此问题。如果要更改的变量是指针,该怎么办?将指针传递给指针

struct node* mir(struct node *root);
struct node* mir2(struct node **root);
...
/* following cannot change value of root */
x = mir(root);
/* following may change value of root */
x = mir2(&root);

那么,有什么好的理由吗?您不应该仅仅因为指针而使用指针…除非您想更改传递给函数的指针(struct node*root)的值,否则不应该。