我可以返回包含来自函数的数组的 struct 吗?或者它是未定义的beahvior?

我使用什么标准有关系吗?

例如:

#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是否会try 指向与s2.arr相同的位置?

也许它创建了一个新数组,并且只将s1.number复制到s2.number?

还是仅仅是UB?

推荐答案

我可以从函数返回包含数组的 struct 吗 不确定的行为?

由于structunion被传递给函数并由102从函数返回,所以它是一个defined behaviour.数组与任何其他类型是相同的 struct 成员.

请记住,the whole个 struct 或unions 将返回,这可能是一个昂贵的操作.

C++相关问答推荐

问关于C中的指针和数组

rSP堆栈指针在返回函数调用的值时有任何用途吗?

修改pGM使用指针填充2-D数组但不起作用

segfault在C中使用getline()函数

intellisense不工作,甚至已经下载了c/c++扩展

为什么在Linux(特别是Ubuntu 20.04LTS)上,POSIX共享内存对象在重启后仍然存在,然后突然变成了根用户?

如何在Visual Studio代码中关闭此函数名称显示功能?

变量>;-1如何在C中准确求值?

为什么内核使用扩展到前后相同的宏定义?

#If指令中未定义宏?

我可以在C中声明不同长度数组的数组而不带变量名吗?

在列表中插入Int指针(C)

1处的解析器错误:yacc语法的语法错误

GCC错误,共享内存未定义引用?

为什么电路板被循环删除?

如何将大写/小写土耳其字母相互转换?

带有数组指针的 struct 在print_stack()函数中打印随机数

C语言中的指针和多维数组

指向返回 struct 成员的指针,安全吗?

clion.我无法理解 Clion 中发生的 scanf 错误