【问题标题】:Data of struct created at return statement of a function is available in caller function在函数的返回语句中创建的结构的数据在调用者函数中可用
【发布时间】:2020-05-28 11:15:17
【问题描述】:

我用 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中按值返回一个结构体,返回的数据是函数内部本地数据的硬拷贝。

标签: c struct static return-value


【解决方案1】:

在此声明中

two_ints nums = func();

您声明了具有自动存储持续时间的 two_ints 类型的对象 nums,并由函数返回的临时对象对其进行了初始化。所以现在对象nums的数据成员num1和数据成员num2对应包含1和2。

所以程序是良构的。

【讨论】:

    【解决方案2】:

    当你返回一个结构时,它会创建一个副本,所以它不需要是静态的。你的函数本质上是这样的:

    two_ints func() {
        two_ints temp = {.num1 = 1, .num2 = 2};
        return temp;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2020-01-18
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多