什么时候使用双指针?

时间:2015-06-10 08:12:27

标签: c pointers data-structures

我看到这个工作代码将树转换为镜像。

 <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"/>

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

1 个答案:

答案 0 :(得分:2)

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);