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

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

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

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

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

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

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

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

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

P.S. Кажется удобнее писать как на первом. Но все же интересует мнения специалистов)
0
18842 / 9841 / 2409
Регистрация: 30.01.2014
Сообщений: 17,284
14.09.2014, 22:24 4
Цитата Сообщение от Nur-daulet Посмотреть сообщение
Тогда какой из них относится к хорошему стилю программирования?
Тут вообще ничего нельзя сказать без знания что такое chResult (это контейнерный класс, это массив, какой у него storage duration, какая политика владения ресурсом и т.д. и т.п.). И без знания о том в каком контексте существует функция getArray() (это метод, это свободная функция и т.д.).
0
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 32
14.09.2014, 22:32  [ТС] 5
Это обычная пользовательская функция.
Я имею ввиду возвращать массив из функций так "return имя_переменной" или же "return &имя_переменной[0]"? Какой вариант лучше использовать?
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
14.09.2014, 22:41 6
Если не привязываться к тому, что за тип у 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  [ТС] 7
Цитата Сообщение от Melg Посмотреть сообщение
Т.е. чем более простым и не запутанным, не нагромождённым будет Ваш код, тем лучше. Потому-что код чаще читают, нежели пишут.
Melg, да я с вами абсолютно согласен)

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

Почему я все это написал? Потому что был поставлен вопрос о "хорошем стиле программирования". А ответ на него можно дать, только зная условия. Абстрактно о хорошем или плохом стиле в большинстве случаев говорить не получится.
1
14.09.2014, 23:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2014, 23:02
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru