Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 32

Получение массива из функций

14.09.2014, 21:39. Показов 973. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Объясните, а какая разница между этими функциями?
C++
1
2
3
4
5
char *getArray()
{
    ...
    return chResult;
}
и
C++
1
2
3
4
5
char *getArray()
{
    ...
    return &chResult[0];
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2014, 21:39
Ответы с готовыми решениями:

Получение данных из функций и классов
Помогите плиз... using System; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; using System.Drawing; ...

Получение адресов функций OpenGL
Решил пойти по стопам товарища, что писал на чистом WinApi (то есть без всяких freeglut'ов и GLWF'ов) и наткнулся на одну проблему. Я...

Получение таблицы функций двух переменных
Спасибо всем, кто отозвался по предыдущему заданию. Ваша помощь бесценна :) Трудности возникли со следующим заданием. В нем я не понимаю,...

9
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
14.09.2014, 21:47
никакой
0
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 32
14.09.2014, 22:14  [ТС]
Совсем нет никакой разницы или отличия?
Тогда какой из них относится к хорошему стилю программирования?

P.S. Кажется удобнее писать как на первом. Но все же интересует мнения специалистов)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
14.09.2014, 22:24
Цитата Сообщение от Nur-daulet Посмотреть сообщение
Тогда какой из них относится к хорошему стилю программирования?
Тут вообще ничего нельзя сказать без знания что такое chResult (это контейнерный класс, это массив, какой у него storage duration, какая политика владения ресурсом и т.д. и т.п.). И без знания о том в каком контексте существует функция getArray() (это метод, это свободная функция и т.д.).
0
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 32
14.09.2014, 22:32  [ТС]
Это обычная пользовательская функция.
Я имею ввиду возвращать массив из функций так "return имя_переменной" или же "return &имя_переменной[0]"? Какой вариант лучше использовать?
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
14.09.2014, 22:41
Если не привязываться к тому, что за тип у chResult (хотя это важно в любом случае) -
C++
1
return chResult;
предполагает максимум 2 операции - приведение типа к char *, и возврата значения из функции.
C++
1
return &chResult[0];
Этот же код делает дополнительные операции - взятие элемента массива, и взятие адреса объекта.
Не уверен, но возможно 2ой вариант может быть соптимизирован до 1ого варианта компилятором, но в общем случае - проще = лучше. Т.е. чем более простым и не запутанным, не нагромождённым будет Ваш код, тем лучше. Потому-что код чаще читают, нежели пишут.

Добавлено через 4 минуты
Сразу стоит Вас предостеречь - если время жизни массива определяется областью видимости функции
C++
1
char *getArray()
(т.е. массив создан без использования ключевого слова new (или calloc из с), либо без использования статического выделения)
тогда возвращать адрес, указывающий на этот массив не следует, т.к. он будет указывать на уже освобождённую область памяти.
1
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 32
14.09.2014, 22:46  [ТС]
Цитата Сообщение от Melg Посмотреть сообщение
Т.е. чем более простым и не запутанным, не нагромождённым будет Ваш код, тем лучше. Потому-что код чаще читают, нежели пишут.
Melg, да я с вами абсолютно согласен)

Насчет этих функций, они все возвращают тип char *. Тогда проще использовать 1-ый вариант!?
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
14.09.2014, 22:47
Nur-daulet, да.
0
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 32
14.09.2014, 22:48  [ТС]
Melg, Спасибо!
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
14.09.2014, 23:02
Цитата Сообщение от Melg Посмотреть сообщение
Сразу стоит Вас предостеречь - если время жизни массива определяется областью видимости функции
Melg, Вот именно. Об этом я и говорил и таких "если" еще вагон. Например, если эта функция класса, а массив член класса, то так возвращать можно. Если массив был создан с помощью new, то нужно продумывать политику владения после возврата (кто должен освобождать память), возможно возвращать нужно уже, например, умный указатель. Если мы возвращаем массив, который не оканчивается нулем (например int*), то предусматривать возможность получения его размера, тогда вообще ни один из вариантов может не подойти (а подойдет возврат через параметры, многие API именно так и делают). Если мы возвращаем массив, который является членом класса, то нужно также думать о константности. Ибо через такой указатель можно будет поменять внутреннее состояние класса (данные в массиве) без ведома самого класса. И еще тысяча "если".

Почему я все это написал? Потому что был поставлен вопрос о "хорошем стиле программирования". А ответ на него можно дать, только зная условия. Абстрактно о хорошем или плохом стиле в большинстве случаев говорить не получится.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2014, 23:02
Помогаю со студенческими работами здесь

Вызов, получение списка функций процесса из injection dll
Есть ли способ получить каким либо образом список функций, или для этого надо дизассемблировать dll, и найти все адреса? Есть ли какой то...

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций.
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. 2 У...

описание функций Win32 API получение имени компьютере GetComputerName
Задание: Написать и отладить консольную программу на языке ассемблера. Функция :Win32 API получение имени компьютере GetComputerName. не...

получение массива из элементов исходного массива, стоящих на нечетных местах
помогите сделать несколько заданий по целочисленному массиву 1- получение массива из элементов исходного массива, стоящих на нечетных...

Получение массива
Здравствуйте. Собственно вопрос в заголовке. Как получить числовой массив с введенных чисел в поле Edit1.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru