【发布时间】:2019-09-16 07:09:08
【问题描述】:
在 C 中查看 Set ADT 的头文件时,我试图理解为什么函数 setUnion 或 setIntersection 是这样声明的:
Set setUnion(Set set1, Set set2);
Set setIntersection(Set set1, Set set2);
我找不到实现,但我假设在这些函数中,我们分配更多空间并创建新集合,然后添加所有必要的元素。 我认为 set1 和 set2 是通过引用传递的,那么为什么不更新其中一个并保存内存分配并只返回一些通知更新是否成功的枚举呢? (例如我们可以更新 left 参数)。
如果它们不是通过引用传递的,我该如何更改签名才能这样做?
谢谢!
【问题讨论】:
-
请显示
Set的定义。 -
这不是一个明智的 API,所以你质疑它是对的。在适当的 C 程序中,我们不会按值传递结构/ADT,也不会将指针隐藏在 typedef 后面。此 API 违反了这两条规则之一。此外,没有 const 正确性。有点代码味道。
标签: c set pass-by-reference adt pass-by-value