Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
1

Динамическое выделение памяти под одномерный массив

18.10.2016, 19:52. Просмотров 1315. Ответов 5
Метки нет (Все метки)

В общем, вопрос такой.
Пусть нам нужно задать массив, используя динамическое выделение памяти. Как это сделать?
Расскажу свой ход мыслей, а вы скажите прав я или нет.
В начале мы задаём указатель на тип данных, после вводим количество необходимых элементов под массив.
Далее резервируем память, используя функцию malloc. (Количество элементов*размер типа данных) Таким образом получаем, сколько будет весить наш массив. Потом путём получения адресов i-ого элемента заполняем массив.
Фрагмент кода:
C
1
2
3
4
5
6
7
8
9
10
    int *array, i,j, n;
    int  Min, Max=0, sum=0, proizv=1,temp,imin;
    printf("Введите необходимое количество элементов массива:");
    scanf("%d",&n);
    array=(int*)malloc(n*sizeof(int));// указатель на целый тип, в котором применяется функция malloc, подсчитывающая необходимое количество памяти в байтах под размерность массива
    for(i=0;i<n;++i)
    {
        printf("[%d]=",i);
        scanf("%d",&array[i]);// вывод i-ого числа элементов массива под зарезервированную системой память
    }
1
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2016, 19:52
Ответы с готовыми решениями:

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

Динамическое выделение памяти под массив
Здравствуйте, помогите пожалуйста сделать в процедуре input динамическое выделение памяти под...

Динамическое выделение памяти под массив строк
Программа выполняет конкатенацию произвольного количества строк. Но видимо я не правильно выделяю...

Динамическое выделение памяти под массив структур
Подскажите, пожалуйста, как верно выделить память под массив структур, размер которого вводится в...

Динамическое выделение памяти под многомерный массив
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику. ...

5
Байт
Эксперт C
20562 / 13070 / 2752
Регистрация: 24.12.2010
Сообщений: 27,402
18.10.2016, 20:25 2
Michail97, Замечательно! Твой пост можно использовать, как учебное пособие.
Будем рекомендовать каждому начинающему сишнику вешать его на стенку.
0
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
18.10.2016, 20:45  [ТС] 3
Байт, что же. Спасибо. =)
0
alexhak
23 / 23 / 19
Регистрация: 01.11.2015
Сообщений: 128
18.10.2016, 20:46 4
Да, все именно так.
0
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
19.10.2016, 11:02  [ТС] 5
Байт, здравствуйте, можно ещё пару вопросов. Вот мы просто объявили указатель на целый тип. Он указывает просто на одну ячейку целого типа или просто указывает? То есть в начальный момент времени память отводится или нет?
после использования функции malloc, мы просто подсчитали нужное кол-во памяти, отводимое под ячейки, а дальше используя цикл, записываем значение в ячейку под определённым адресом? И главный вопрос: чем отличаются две записи?
C
1
2
scanf("%d",&array[i]);
scanf("%d", (array+i));
Я так понял, что во втором случае, раз значением указателя является адрес, а элементы массива всегда расположены так, что адреса у них находятся в последовательности, мы просто добавляем значение i к адресу?
И чем 2-ой способ лучше 1-ого?
0
Байт
Эксперт C
20562 / 13070 / 2752
Регистрация: 24.12.2010
Сообщений: 27,402
19.10.2016, 14:56 6
Лучший ответ Сообщение было отмечено Michail97 как решение

Решение

Цитата Сообщение от Michail97 Посмотреть сообщение
И главный вопрос: чем отличаются две записи?
Ничем. Мне лично больше нравится вторая. Дело вкуса. Во второй скобки можно убрать.
Цитата Сообщение от Michail97 Посмотреть сообщение
объявили указатель на целый тип. Он указывает просто на одну ячейку целого типа
Пока мы ему(указателю) ничего не присвоиволи, он никуда и не указывает. В нем(в указателе) находится мусор. То есть он куда-то указывает (пальцем в небо), но там никто не знает что. Как в сказке - "Пойди туда - не знаю куда, принеси то - не знаю что" Обычно обращение к памяти по такому неинициализированному указателю приводит к краху программы. Но, к сожалению, не всегда.
Цитата Сообщение от Michail97 Посмотреть сообщение
в начальный момент времени память отводится или нет?
Нет.
Цитата Сообщение от Michail97 Посмотреть сообщение
после использования функции malloc, мы просто подсчитали нужное кол-во памяти, отводимое под ячейки, а дальше используя цикл, записываем значение в ячейку под определённым адресом?
Правильно понимаешь!
2
19.10.2016, 14:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2016, 14:56

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

Динамическое выделение памяти под структуры
Такая ситуация. Необходимо написать функцию ввода структуры c консоли void vvod(student &amp;man). Так...

Динамическое выделение памяти под файл
Дали задание считать масив чисел с файла Ф1, сделать над ним некоторые действия и получившийся...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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