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

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

18.10.2016, 19:52. Просмотров 2117. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2016, 19:52
Ответы с готовыми решениями:

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

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

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

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

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

Решение

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

Выделение памяти под одномерный массив
int main() { int *a; a = new int; for (int i = 0;i &lt; 10;i++) { a = rand() % 100; cout...

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


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

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

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