1

我正在学习 C 并且对我在网上阅读的内容感到困惑。

http://www.cs.bu.edu/teaching/c/stack/array/

我可以阅读:

让我们看一下决定空和满的功能。现在,没有必要通过引用这些函数来传递堆栈,因为它们不会更改堆栈。因此,我们可以将它们原型化为:

int StackIsEmpty(stackT stack);
int StackIsFull(stackT stack);

然而,有些堆栈函数会使用指针(例如,我们需要它们用于 StackInit() 等),而有些则不会。始终通过引用(使用指针)传递堆栈更加一致

(我没有展示 stackT 的代码,它只是一个动态数组)

根据我(可能是有限的)理解,按值传递的缺点是数据在函数的堆栈内存中重复。由于 stackT 可能很大,因此按值而不是指针传递会很耗时。

我是正确的还是我仍然不清楚基础知识?

4

2 回答 2

3

正确,如果您通过值传递“大”的东西,该项目将被复制到堆栈中。

传递指向数据的指针可以避免复制。

值得怀疑的是,性能差异在大多数实际应用程序中是否有意义,除非“大”实际上是“巨大”(这反过来可能会溢出堆栈)。

于 2013-10-30T00:16:43.137 回答
1

你是对的。按值传递会导致程序完整地复制该参数中的所有数据。如果它只有一两个整数,没问题,但是复制多个千字节是非常昂贵的。通过引用传递只复制指针。
但是,您必须注意更改指针指向的数据,然后期望原样返回它。C++ 有通过“const 引用”传递,这就像保证数据不会被更改,但 C 不会。

于 2013-10-30T00:18:52.423 回答