Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
sterkh
5 / 5 / 1
Регистрация: 06.04.2013
Сообщений: 99
#1

Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? - C++

10.08.2014, 18:00. Просмотров 1220. Ответов 40
Метки нет (Все метки)

Если выделение памяти для дин.массива задать void-функцией, можно ли будет оперировать с ним в main или придётся отдельно выделять память в main?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2014, 18:00     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main?
Посмотрите здесь:

что плохого если я делаю ф-ю main типа void - C++
привет всем, кто может объяснить, что плохого если я делаю ф-ю main типа void ?

Как в отдельной функции выделить память для динамического массива, объявленного в main - C++
Доброго времени суток. Передо мной стоит задача выделения памяти для динамического массива в отдельной функции. То есть я объявляю в...

Вызов функции динамического выделение памяти - C++
Здравствуйте! Нужна помощь! Написал функцию выделение памяти под двумерный динамический массив, которая возвращает масив размером...

Неправильное выведение памяти для динамического массива - C++
Написал несложную программу. Когда в одном объекте вывожу динамический массив другого вложенного объекта, выдает ошибку в этих строках ...

Выделение памяти для массива - C++
верно ли выделил память для массива если нет поправьте, заранее спасибо) class type { private: int ***p; int x, y, z; public: ...

Выделение памяти для массива - C++
Пишу такой код: int main() { int* arr1 = new int; } Всё норм. Теперь такой:

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
10.08.2014, 18:02     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #2
Цитата Сообщение от sterkh Посмотреть сообщение
Если выделение памяти для дин.массива задать void-функцией, можно ли будет оперировать с ним в main или придётся отдельно выделять память в main?
можно
не прийдется
sterkh
5 / 5 / 1
Регистрация: 06.04.2013
Сообщений: 99
10.08.2014, 18:03  [ТС]     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #3
Спасибо
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.08.2014, 19:09     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #4
Цитата Сообщение от sterkh Посмотреть сообщение
Если выделение памяти для дин.массива задать void-функцией
Что здесь имеется в виду вообще?
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
10.08.2014, 19:16     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #5
Tulosba, видимо что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
void foo(int* a, int n)
{
a = new int [n];
}
 
int main()
{
int* a;
foo(a, 5);
// работа с a - надо ли писать a = new int [5];
return 0;
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.08.2014, 19:23     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #6
CyberSolver, в таком варианте указатель на выделенную память не вернется. Если хочется вернуть значение через аргумент-указатель, то уровень указателя (грубо говоря, количество звездочек *) должен быть на 1 больше, чем тип обрабатываемого объекта. Т.е.
C++
1
2
3
4
5
6
7
void foo(int** a, int n)
{
   *a = new int [n];
}
...
int* a;
foo( &a, 5 );
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
10.08.2014, 19:36     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #7
Tulosba, ключевыми словами были «что-то типа». И если бы человек написал ваш код, то и вопроса бы не возникло, верно?
sterkh
5 / 5 / 1
Регистрация: 06.04.2013
Сообщений: 99
10.08.2014, 20:42  [ТС]     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #8
C++
1
2
3
4
5
6
7
8
9
10
void freeb(int ***b, int n){
    int i;
    *b = (int**)calloc(n, sizeof(int*));
    for (int i = 0; i < n; i++) {
        *b[i] = (int*)calloc(n, sizeof(int));
    }
}
 
int **b;
freeb(&b,n);
То есть вот так будет выглядеть для двумерного массива nxn?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.08.2014, 23:39     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #9
Цитата Сообщение от sterkh Посмотреть сообщение
То есть вот так будет выглядеть для двумерного массива nxn?
Если опираться на сишные функции, то что-то в этом духе.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
11.08.2014, 00:00     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
sterkh, а если опираться на С++, то лучше передать ссылку на указатель
C++
1
2
3
4
void freeb(int *&b, int n)
{
    // здесь можно присваивать укзателю
}
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
11.08.2014, 00:16     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #11
Лучше уж возвращать указатель. Передавать по не-const ссылке - плохо.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
11.08.2014, 00:42     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #12
Цитата Сообщение от Toshkarik Посмотреть сообщение
Передавать по не-const ссылке - плохо.
Твое мнение, чем?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
11.08.2014, 00:44     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #13
Очевидно же, что неочевидно
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
11.08.2014, 01:38     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #14
Цитата Сообщение от Toshkarik Посмотреть сообщение
Очевидно же, что неочевидно
Это спорно.
Довод, что, мол, понятно становится по операции взятия адреса, что внутри функции объект изменяется в большинстве случаев рассыпается о факт того, что программисту все равно придется смотреть определение (хотя бы чтобы выяснить константность указателя). А раз он посмотрел определение, то ссылка там или указатель уже не важно - программист уже все понял.

Чтобы у тебя не сложилось ошибочное мнение, что, мол, я не согласен и везде хочу писать ссылки - сразу скажу: это не так. Всего лишь хотел подчеркнуть, что тема весьма спорная и, принимая это во внимание, так однозначно утверждать про "плохо" или "хорошо" нельзя.
Что касается моего мнения на сложившуюся ситуацию, то оно совпадает с первым ответом вот здесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2014, 02:26     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main?
Еще ссылки по теме:

Выделение памяти для массива - C++
Вопроса похожего не нашел, в задаче требуется считать матрицу из текстового файла,выделение хотелось бы реализовать следующим образом: ...

Динамическое выделение памяти для массива - C++
Не могу разобраться, почему программа вызывает точку остановы после выбора действия в функции, причем не показывает, где. Она происходит...

Выделение памяти для непрямоугольного массива - C++
Возник вопрос: У меня в любительской прожке. Для ускорения расчётов формируется два массива поскольку массивы непрямоугольные , для их...

Динамическое выделение памяти для массива - C++
Кто может помочь решить задачу. Для заданного двумерного массива из n строк и m столбцов вывести на экран следующее меню операций: ...


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

Или воспользуйтесь поиском по форуму:
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
11.08.2014, 02:26     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? #15
Если нужно смотреть большой чужой код и соблюдается данное соглашение, то будет намного легче. Если в функцию передается адрес, то объект может быть её изменен. В остальных случаях, будь то передача по константной ссылке или же по значение, - объект не изменяется. Не нужно будет лишний раз лезть в заголовок за прототипом. Поэтому, я бы отдал предпочтение вот этому соглашению:
http://google-styleguide.googlecode....ence_Arguments
Yandex
Объявления
11.08.2014, 02:26     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru