我可以从函数返回一个包含数组的结构还是它是未定义的行为?
我使用什么标准重要吗?
例如:
#include <string.h>
typedef struct struct_t{
char arr[100];
int number;
} struct_t;
struct_t func(void)
{
struct_t s1 = {.number = 0};
memcpy(s1.arr, "Hello World", 100);
return s1;
}
int main(void)
{
struct_t s2 = func();
return 0;
}
它会深拷贝 s1.arr 到 s2.arr 吗?
如果没有,s2.arr 会尝试指向与 s2.arr 相同的位置吗?
也许它创建了一个新数组并且仅将 s1.number 复制到 s2.number?
还是只是UB?
我可以从函数返回一个包含数组的结构吗? 未定义的行为?
结构体和联合体按值传递给函数并从函数返回是一种定义的行为
请记住,整个结构或联合将被返回,这可能是非常昂贵的操作
是的,数组成员就像任何其他结构体成员一样被复制,就好像它是结构体中的
char arr0, arr1, ..., arr99;
一样。