在函数的返回语句中创建的结构体的数据可以在函数的调用者中获得。

问题描述 投票:0回答:2

我用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。我想知道的是,它是否每次都能工作?我的意思是,编译器是否做了一些事情,使返回的结构是静态的,因为它应该被返回。

谢谢你。

c struct static return-value
2个回答
2
投票

在这句话中

two_ints nums = func();

你声明了一个类型为two_ints的对象nums,它具有自动存储持续时间,并通过函数返回的临时对象初始化它。所以现在对象nums的数据成员num1和数据成员num2分别对应地包含1和2。

所以程序的形式很好。


1
投票

当你返回一个结构体时,它就会做一个拷贝,所以不需要它是静态的。你的函数基本上就是这样的简称。

two_ints func() {
    two_ints temp = {.num1 = 1, .num2 = 2};
    return temp;
}
© www.soinside.com 2019 - 2024. All rights reserved.