Заполнение массива с помощью указателей - C (СИ)
Формулировка задачи:
Добрый день! Можно ли задать массив с помощью указателя?
Или массив задается обычным способом, а затем только можно использовать указатели? (выдает ошибку:format "%d" expects type "int *", but argument 2 has type "int")
Заранее благодарю!
int a[n]; int i,j; int *ptd=а; for (i=0;i<n;i++) scanf("%d", *(ptd+i))
Решение задачи: «Заполнение массива с помощью указателей»
textual
Листинг программы
#include <stdlib.h> #include <stdio.h> int main() { int i; //счетчик цикла int n; //в эту переменную будет введено количество элементов в массиве int *p; //в эту переменную будет помещен указатель на динамический массив printf("Input number of elements: "); fflush(NULL); //эта функция сбрасывает файловые буфера scanf("%d", &n); //вводим число в переменную n p = (int*)malloc( n*sizeof(*p) ); //выделение области памяти под n элементов типа int //можно это сделать так: for(i = 0; i < n; ++i) p[i] = i*10; //присваиваем элементам массива удесятеренное значение индекса for(i = 0; i < n; ++i) printf("%d ", p[i]); //выводим все элементы массива через пробел в одну строчку printf("\n"); free(p); //освобождаем память, выделенную под массив system("pause"); //задержка экрана до нажатия пользователем любой клавиши return 0; //успешное завершение программы } /*В данном примере был создан массив из n элементов типа int, причем число n вводилось с клавиатуры. Указатель на начало массива был присвоен переменной p. Дальнешие операции над p ничем не отличаются от оных для статических массивов. Разве что, sizeof(p) вернет размер указателя p, а не размер массива в байтах. Как нетрудно заметить, в конце функции идет освобождение памяти, выделенной под массив. Чтобы избежать утечек памяти, нужно ВСЕГДА освобождать память, как только она перестала быть нужной.*/
Объяснение кода листинга программы
- Объявление переменных:
- i (счетчик цикла)
- n (количество элементов в массиве)
- p (указатель на динамический массив)
- Ввод количества элементов в массив с помощью функции scanf().
- Выделение памяти под массив с помощью функции malloc(). Размер памяти выделяется в байтах, поэтому используется оператор sizeof для получения размера указателя.
- Присваивание элементам массива значения, равного удесятеренному значению их индекса.
- Вывод всех элементов массива через пробел в одну строчку с помощью функции printf().
- Освобождение памяти, выделенной под массив, с помощью функции free().
- Задержка экрана до нажатия пользователем любой клавиши с помощью функции system().
- Возвращение 0 в качестве кода успешного завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д