Указатели и динамическая память - C (СИ)
Формулировка задачи:
1. Создать массив с использованием указателя. Заполнить созданный массив значениями согласно варианту. Для обращения к элементам массива при заполнении использовать индексы массива. Результат в виде таблицы значений массива вывести на консоль. Для обращения к элементам массива при выводе информации использовать указатели.
2. Создать массив в динамической памяти. Заполнить созданный массив значениями согласно варианту. Результат в виде таблицы значений массива вывести на консоль. После завершения работы с массивом освободить динамическую память.
Нужный массив: a,b,c,d.
В общем, никак не могу вникнуть в указатели, хотя довольно упорно пытаюсь. Саму суть я, вроде бы, уловил, но как реализовать предложенные задания понять не могу. Буду благодарен за помощь.
Решение задачи: «Указатели и динамическая память»
textual
Листинг программы
int _tmain()
{
int m,n,i,j;
int *a;
printf("Kolichestvo strok: ");
scanf_s ("%d", &n);
printf("Kolichestvo stolbcow: ");
scanf_s ("%d", &m);
a = (int*) malloc(n*m*sizeof(int));
for (i=0;i<n;i++) {
for (j=0;j<m;j++){
printf("Vvedite element [%d,%d]\n", i, j);
scanf_s("%d",(a+i*m+j) );
}
}
printf("MATRICA: \n");
for (i=0;i<n;i++) {
for (j=0;j<m;j++){
printf("%d ", *(a+i*m+j));}
printf("\n");
}
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные
m,n,i,jтипаint, а также переменнаяaтипаint*и выделена динамическая память для массиваaразмеромn*m(в строках и столбцах соответственно). - Пользователю предлагается ввести количество строк и столбцов матрицы.
- Затем пользователю предлагается ввести элементы матрицы, для чего используется два вложенных цикла. Внешний цикл выполняется
nраз (по количеству строк), а внутренний -mраз (по количеству столбцов). - В каждой итерации внутреннего цикла пользователю предлагается ввести элемент матрицы, и он сохраняется в соответствующем элементе массива
a. - После ввода всех элементов матрицы выводится приглашение для ввода строки, и затем выводится сама матрица.
- Для вывода матрицы используется два вложенных цикла. Внешний цикл выполняется
nраз (по количеству строк), а внутренний -mраз (по количеству столбцов). При каждой итерации внутреннего цикла выводится текущий элемент матрицы. - После вывода матрицы программа завершается.