我知道在C中你可以按值传递(或返回)一个结构但你不能按值传递一个数组。当结构包含数组时会发生什么?结构是按值传递(或返回)时是否会复制数组(在结构中)?我已经运行了a sample at ideone.com并且它有效,但我想知道标准在哪里被覆盖(是的,我看过了)。
http://open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
typedef struct
{
float aValue;
int anArray[5];
} myStruct;
myStruct addValueToArray(myStruct in)
{
myStruct out = in;
int i;
for (i = 0; i < 5; i++)
{
out.anArray[i] = in.anArray[i] + in.aValue;
}
return out;
}
答案 0 :(得分:5)
是的,它会被复制。整个结构是一个值,所以它可以被传递给一个函数,返回,并且(很多人似乎忘了这个,但是你使用它,好!)分配。
请注意,可能存在的任何填充都需要不被复制,这使得=
更快比手动调用{{}更快 1}}可能是,因为它永远不会那样做。
很难在支持这一点的PDF中找到一个地方,但我看起来不是很有经验。基本上,memcpy()
个实例在C语义中是“值”,因此大部分谈话都会自动涵盖struct
个。
像:
(6.2.5,第1部分) 存储在对象中或由函数返回的值的含义由 用于访问它的表达式的类型。
(6.2.5,第20部分) 结构类型描述了顺序分配的非空成员对象集 (并且,在某些情况下,是一个不完整的数组),每个都有一个可选的 指定的名称和可能不同的类型。
(6.8.6.4,第3部分) 如果执行带有表达式的return语句,则表达式的值为 作为函数调用表达式的值返回给调用者。