Функция, возвращающая структуру, и функция, возвращающая строку-- Другое поведение? - PullRequest
0 голосов
/ 06 сентября 2011

Я слышал, что мы не можем вернуть указатель на локальную (автоматическую) переменную массива из функции, поскольку автоматическая переменная имеет ограниченную область видимости, и они исчезают, как только вызванная функция возвращает.

char *s getName()
{
char name[]="Sumit";  // Automatic variable 
retrun name; // No scope outside the function

}

Но у меня возникает сомнение:

struct info getInfo(int a,int b)
{

struct info f1; // Automatic variable memory allocated for a structure
f1.a=a; 
f1.b=b;

return f1;

}

здесь также мы возвращаем ссылку на область памяти, которая выделена локально. Тогда как же здесь все работает отлично?

PLZ HELP Ожидание ответа

1 Ответ

0 голосов
/ 27 декабря 2011

Потому что вы «фактически» возвращаете 2 дюйма (ну, не совсем, но следуйте аналогии).

Это та же самая причина, по которой

inline int GetZero (int i)
{
    int j = i;

    return j;
}

GetZero(0);

работает ...

Кроме того, вы не возвращаете ссылку, вы возвращаете значения.

ЭТО возвращает по ссылке:

int& GetZero (int i)

И, очевидно, это возвращается по указателю:

int* GetZero (int i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...