реклама на сайте
подробности

 
 
> Возврат структуры из функции, косяк Кернигана-Ричи
ViKo
сообщение Feb 9 2015, 07:04
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Перечитывая книжку классиков по программированию на языке С, обнаружил, что они возвращают из функции целую структуру. Конкретно, структуру из двух координат точки. Как это (возможно)?
У Шилдта этот вопрос вежливо замалчивается...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Feb 9 2015, 08:52
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Ничего не понимаю. То, что передается в функцию, не имеет отношения к тому, что выдается. Именно так показано в примерах в книге K&R. Давайте ограничимся возвратом.
Указатель на локальную переменную выдавать не будем. Будем выдавать указатель на глобальную структуру. Хотя, зачем его выдавать, можно просто флаг готовности результата выдать.
Если можно выдать структуру, то почему нельзя выдать аналогичным образом массив?
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 9 2015, 09:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Feb 9 2015, 11:52) *
Если можно выдать структуру, то почему нельзя выдать аналогичным образом массив?


Можно. Для этого он должен быть внутри структуры, которая может быть из одного массива.

А аналогичным образом нельзя потому, что массив есть указатель на кусок предвыделенной на этапе компиляции памяти. А структура - есть сам набор данных, а не указатель на него. Поэтому "return <массив>" - ошибочен, так как получается требование возврата указателя, возможно на локальный буфер, время жизни которого кончается с выходом из ф-ции. А "return <структура>" - корректно, так как это требования возврата самих данных, хранящихся в структуре, а не указателя на структуру. Поэтому присваивания и возвраты массивов изначально не предусмотрены, а структур - пожалуйста.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Возврат структуры из функции   Feb 9 2015, 07:04
- - Grizzzly   Цитата(ViKo @ Feb 9 2015, 10:04) Как это ...   Feb 9 2015, 07:26
|- - jcxz   Цитата(Grizzzly @ Feb 9 2015, 13:26) Комп...   Feb 9 2015, 12:09
|- - SM   Цитата(jcxz @ Feb 9 2015, 15:09) Не смотр...   Feb 9 2015, 12:41
||- - Grizzzly   Цитата(SM @ Feb 9 2015, 15:41) а вот фраг...   Feb 9 2015, 12:45
|- - Grizzzly   Цитата(jcxz @ Feb 9 2015, 15:09) Не смотр...   Feb 9 2015, 12:42
|- - SM   Цитата(Grizzzly @ Feb 9 2015, 15:42) Возм...   Feb 9 2015, 12:43
- - ViKo   Тогда это должно называться возврат указателя на с...   Feb 9 2015, 07:45
|- - Bear_ku   Цитата(ViKo @ Feb 9 2015, 12:45) Тогда эт...   Feb 9 2015, 08:52
- - Bear_ku   А вы дерзкий! Я бы не решился возвращать из фу...   Feb 9 2015, 08:15
|- - SM   Цитата(Bear_ku @ Feb 9 2015, 11:15) А вы ...   Feb 9 2015, 08:29
|- - ar__systems   Цитата(SM @ Feb 9 2015, 03:29) А никто та...   Mar 13 2015, 15:17
|- - XVR   Цитата(ar__systems @ Mar 13 2015, 18:17) ...   Mar 16 2015, 12:21
|- - ViKo   Цитата(SM @ Feb 9 2015, 12:00) А аналогич...   Feb 9 2015, 09:09
|- - SM   Цитата(ViKo @ Feb 9 2015, 12:08) Единстве...   Feb 9 2015, 09:11
|- - andrew_b   Цитата(ViKo @ Feb 9 2015, 12:09) Число ил...   Feb 9 2015, 09:13
|- - SSerge   Цитата(ViKo @ Feb 9 2015, 16:09) Кто же и...   Feb 9 2015, 09:33
- - andrew_b   Вас же не смущает возврат, например, целого числа....   Feb 9 2015, 09:05
- - ViKo   Будем считать что я осознал и раскаялся... (хотя р...   Feb 9 2015, 09:27
- - SM   Цитата(ViKo @ Feb 9 2015, 12:27) Я же не ...   Feb 9 2015, 09:34


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 17:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016