我想知道为什么我们可以通过值将结构传递给 C 函数,但我们不能对数组(通过地址传递)做同样的事情。
当我学习 C 时,他们告诉我数组会消耗很多堆栈,因此不建议按值传递它们。
但似乎结构通常(如果不总是)大于数组并且是更复杂的数据结构,所以这种解释现在对我来说毫无意义!
任何人都可以提供尽可能多的细节吗?
我想知道为什么我们可以通过值将结构传递给 C 函数,但我们不能对数组(通过地址传递)做同样的事情。
当我学习 C 时,他们告诉我数组会消耗很多堆栈,因此不建议按值传递它们。
但似乎结构通常(如果不总是)大于数组并且是更复杂的数据结构,所以这种解释现在对我来说毫无意义!
任何人都可以提供尽可能多的细节吗?
在 C 中,数组总是被定义为指向数组第一个位置的指针,因此根据定义,当您将数组传递给函数时,您正在传递它的内存地址,因此是它的引用。
当您定义 struct 类型的变量时,您将分配包含该结构所需的所有内存空间,并且如果您执行以下操作:
struct a, b;
...
a = b;
您正在将所有值从 b 复制到 a,同样,当您将其传递给函数时,您正在将原始结构的值复制到堆栈中。这称为按值传递参数。
你在问题中所说的是真的。struct 可能比数组更复杂,但完全可以将其作为值传递,并且可能效率低下,但不能按值传递数组的原因是因为它默认定义为指针。