C 按值传递和返回结构(包含数组成员)
我知道在C语言中,可以通过值传递(或返回)结构,但不能通过值传递数组。当结构包含数组时会发生什么?当通过值传递(或返回)结构时,是否会复制(位于结构中的)数组?我已经运行过了,它可以正常工作,但我想知道在标准中这是在哪里涵盖的(是的,我已经看过了)C 按值传递和返回结构(包含数组成员),c,arrays,return,structure,pass-by-value,C,Arrays,Return,Structure,Pass By Value,我知道在C语言中,可以通过值传递(或返回)结构,但不能通过值传递数组。当结构包含数组时会发生什么?当通过值传递(或返回)结构时,是否会复制(位于结构中的)数组?我已经运行过了,它可以正常工作,但我想知道在标准中这是在哪里涵盖的(是的,我已经看过了) typedef结构 { 浮动汇率; 国际原子能机构[5]; }我的结构; myStruct addValueToArray(myStruct in) { myStruct out=in; int i; 对于(i=0;i
typedef结构
{
浮动汇率;
国际原子能机构[5];
}我的结构;
myStruct addValueToArray(myStruct in)
{
myStruct out=in;
int i;
对于(i=0;i<5;i++)
{
out.anArray[i]=in.anArray[i]+in.aValue;
}
返回;
}
是的,它将被复制。整个结构都是一个值,因此可以将其传递给函数、返回和赋值(许多人似乎忘记了这一点,但您使用它,很好!)
请注意,可能存在的任何填充都不需要复制,这使得=
可能比手动调用memcpy()
要快,因为它永远无法做到这一点
在PDF中很难找到一个支持这一点的地方,但我在查找方面不是很有经验。基本上,struct
实例是C意义上的“值”,因此大部分讨论都自动涉及到struct
s
比如:
(6.2.5,第1部分)
存储在对象中或由函数返回的值的含义由
用于访问它的表达式的类型
(6.2.5,第20部分)
结构类型描述按顺序分配的非空成员对象集
(在某些情况下,是一个不完整的数组),每个数组都有一个可选的
指定的名称和可能不同的类型
(6.8.6.4,第3部分)
如果执行带有表达式的return语句,则表达式的值为
作为函数调用表达式的值返回给调用方
在
结构中包装数组是按值传递数组的常用方法。
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;
}