【问题标题】:passing out parameters in different level of functions在不同级别的函数中传递参数
【发布时间】:2015-11-18 22:26:55
【问题描述】:

我有 linklist 可以正常工作的 c 程序,但后来的要求是不能使用全局变量。所以我不得不重新设计所有东西以避免传递参数,但是有些部分很难重新设计,并且一些函数正在调用函数和另一个函数,一个例子是在显示器上。

int main() {
        display(&head, &tail);
}

void display(myrec **head, myrec **tail) {
        sort(&*head, &*tail)
        then sort again call function swap
}

我的问题是如何正确地多次传递参数。使用 sort(&*head, &*tail) 程序无法正常工作,没有语法错误,但现在数据中缺少条目。我试图在显示函数上编写所有代码只是为了检查它确实如此,所以我猜我在传递变量时做错了。谢谢。

它不是递归,head和tail是保存链表状态的变量,所以在swap中是change,我还需要将变化反映给root caller,程序的其他部分需要新的状态头和尾。

【问题讨论】:

  • &*x = x;这是多余的。请创建一个minimal reproducible example
  • 投反对票的原因是什么?
  • 你如何定义sort
  • &*E 等价于E(N1256 6.5.3.2 地址和间接运算符脚注87),因此您可以使用headtail 而不是&*head&*tail .

标签: c parameters out


【解决方案1】:

将输出参数重新传递给另一个函数是一次又一次地添加“&”。 退出显示将使 head 和 tail 变量反映对其他功能所做的更改。不确定这是否是最好的方法,但它正在工作。

例如

display(&head, &tail);

void display(myrec **head, myrec **tail) {
sort(&*head, &*tail)
}

void sort(myrec **head, myrec **tail) {
swap(&*head, &*tail)
}

【讨论】:

  • &*E 等效于 E(N1256 6.5.3.2 地址和间接运算符脚注 87),因此您可以使用 headtail 而不是 &*head&*tail .
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 2021-07-08
  • 2017-08-10
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多