【问题标题】:When to use double pointers?什么时候使用双指针?
【发布时间】:2015-06-10 08:12:26
【问题描述】:

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

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 **) 吗?

【问题讨论】:

  • 好吧,有什么好的理由吗?你不应该使用指针仅仅因为指针
  • 除非你想改变传递给函数的指针(struct node *root)的值,否则不会。

标签: c pointers data-structures


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2018-11-10
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多