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

Arrays 将数组和结构传递给C函数,arrays,function,structure,memory-address,Arrays,Function,Structure,Memory Address,我想知道为什么我们可以通过值将结构传递给C函数,但对于数组(通过地址传递)我们永远不能这样做 当我学习C语言时,他们告诉我数组消耗了很多堆栈,所以不喜欢按值传递它们 但似乎结构通常(如果不是总是)比数组大,并且是更复杂的数据结构,所以这个解释现在对我来说没有意义 有人能提供尽可能多的详细信息吗?在C语言中,数组总是被定义为指向数组第一个位置的指针,因此根据定义,当您将数组传递给函数时,就是传递它的内存地址,从而传递它的引用 定义struct类型的变量时,将在内存中分配包含此struct所需的所有

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

当我学习C语言时,他们告诉我数组消耗了很多堆栈,所以不喜欢按值传递它们

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


有人能提供尽可能多的详细信息吗?

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

定义struct类型的变量时,将在内存中分配包含此struct所需的所有空间,如果执行以下操作:

struct a, b;
...
a = b;
您正在将所有值从b复制到a,同样,当您将其传递给函数时,您正在将原始结构的值复制到堆栈。这叫做按值传递参数


你在问题中所说的是真的。结构可能比数组更复杂,但完全可以将其作为值传递,而且可能效率较低,但不能按值传递数组的原因是,默认情况下,它被定义为指针。

+1注释数组不是“按指针定义的”,在传递给函数时,它们会退化为指针。这个问题以前在C++环境中被问过,但也适用于C。