我用C语言写了以下程序。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int num1;
int num2;
} two_ints;
two_ints func() {
return (two_ints){.num1 = 1, .num2 = 2};
}
int main() {
two_ints nums = func();
printf("%d %d", nums.num1, nums.num2);
return 0;
}
这段代码不知道为什么能用。它打印1和2。我想知道的是,它是否每次都能工作?我的意思是,编译器是否做了一些事情,使返回的结构是静态的,因为它应该被返回。
谢谢你。
在这句话中
two_ints nums = func();
你声明了一个类型为two_ints的对象nums,它具有自动存储持续时间,并通过函数返回的临时对象初始化它。所以现在对象nums的数据成员num1和数据成员num2分别对应地包含1和2。
所以程序的形式很好。
当你返回一个结构体时,它就会做一个拷贝,所以不需要它是静态的。你的函数基本上就是这样的简称。
two_ints func() {
two_ints temp = {.num1 = 1, .num2 = 2};
return temp;
}