将数组和结构传递给C函数

Ahm*_*del 3 arrays structure function memory-address

我想知道为什么我们可以通过值将结构传递给C函数,但我们永远不能对数组(通过地址传递)做同样的事情.

当我学习C时,他们告诉我数组会消耗很多堆栈,因此不希望按值传递它们.

但似乎结构通常(如果不总是)大于数组并且是更复杂的数据结构,所以这个解释现在对我来说没有意义!

任何人都可以帮助尽可能多的细节吗?

Her*_*uez 5

在C中,数组总是被定义为指向数组第一个位置的指针,因此根据定义,当您将数组传递给函数时,您将传递其内存地址,从而引用它.

当你定义一个struct类型的变量时,你要分配内存中所需的所有空间来包含这个结构,如果你做了类似的东西:

struct a, b;
...
a = b;
Run Code Online (Sandbox Code Playgroud)

您正在将所有值从b复制到a,并且以相同的方式,当您将它传递给函数时,您将原始结构的值复制到堆栈.这被称为按值传递参数.

你在问题中说的是真的.结构可能比数组更复杂,但完全可以将其作为值传递,并且它可能效率低下,但是您无法通过值传递数组的原因是因为它默认定义为指针.