【问题标题】:Is there something in C that is analogous to out/out keyword of C#?C 中是否有类似于 C# 的 out/out 关键字的东西?
【发布时间】:2020-04-23 03:45:09
【问题描述】:
void extract_left_subtree(node *right_child)
{
    while(right_child->right)
    {
        right_child = right_child->right;
    }  
    printf("rightmost inside the funtion is %d\n",right_child->data);
}

在此函数中,最后一行打印了正确的值。

 node *right_child=root;
 extract_left_subtree(right_child);
 printf("rightmost child is %d\n",right_child->data);

但是在这里我得到了一些垃圾值。

我知道问题是什么,我知道为什么会这样,我唯一不知道的是如何纠正这个问题? C# 中有 ref 和 out 这样的关键字可以用来实现相同的功能,但问题是,我们如何在 C 语言中做到这一点?

我不想从方法中返回值

【问题讨论】:

  • Re "我不想从方法中返回值",C 没有类,所以它没有方法。以上是一个函数(C的名字)或子程序(通用名)。

标签: c pointers pass-by-reference pass-by-pointer


【解决方案1】:

我不想从方法中返回值

如果你不想返回一个值,你可以这样做:

void extract_left_subtree(node **right_child)
{
    while((*right_child)->right)
    {
        (*right_child) = (*right_child)->right;
    }  
    printf("rightmost inside the funtion is %d\n", (*right_child)->data);
}

然后这样称呼它:

extract_left_subtree(&right_child);

这会将right_child的地址传递给函数,然后函数可以直接更新right_child的值

【讨论】:

  • 不使用相同的参数作为输入和输出,另一种方法是重写函数以使用两个参数,一个用于输入,一个用于输出。
  • @AndreasWenzel 你为什么要这样做?调用像extract_left_subtree(right_child, &right_child); 这样的函数看起来很奇怪,IMO
  • 这就像一个魅力,我完全忘记了指针也留在内存中,它们也有一些地址。
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多