Данные структуры, созданной в операторе возврата функции, доступны в вызывающей функции - PullRequest
2 голосов
/ 28 мая 2020

Я написал следующую программу на 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. Я хочу знать, будет ли он работать каждый раз? Я имею в виду, делает ли компилятор что-то, чтобы структура возвращала stati c, поскольку она должна быть возвращена.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

В этом операторе

two_ints nums = func();

вы объявили объект nums типа two_ints с автоматической c продолжительностью хранения и инициализировали его временным объектом, возвращаемым функцией. Итак, теперь элемент данных num1 и элемент данных num2 объектов nums содержат соответственно 1 и 2.

Итак, программа сформирована правильно.

1 голос
/ 28 мая 2020

Когда вы возвращаете структуру, она делает копию, поэтому нет необходимости, чтобы она была c. Ваша функция по существу коротка для этого:

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