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)的值,否则不应该。