Заполнение массива с помощью указателей - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день! Можно ли задать массив с помощью указателя?
int a[n];
int i,j;
int *ptd=а;
for (i=0;i<n;i++)
scanf("%d", *(ptd+i))
Или массив задается обычным способом, а затем только можно использовать указатели? (выдает ошибку:format "%d" expects type "int *", but argument 2 has type "int") Заранее благодарю!

Решение задачи: «Заполнение массива с помощью указателей»

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, а не размер массива в байтах. Как нетрудно заметить, в конце функции 
идет освобождение памяти, выделенной под массив. Чтобы избежать утечек памяти, нужно ВСЕГДА 
освобождать память, как только она перестала быть нужной.*/

Объяснение кода листинга программы

  1. Объявление переменных:
    • i (счетчик цикла)
    • n (количество элементов в массиве)
    • p (указатель на динамический массив)
  2. Ввод количества элементов в массив с помощью функции scanf().
  3. Выделение памяти под массив с помощью функции malloc(). Размер памяти выделяется в байтах, поэтому используется оператор sizeof для получения размера указателя.
  4. Присваивание элементам массива значения, равного удесятеренному значению их индекса.
  5. Вывод всех элементов массива через пробел в одну строчку с помощью функции printf().
  6. Освобождение памяти, выделенной под массив, с помощью функции free().
  7. Задержка экрана до нажатия пользователем любой клавиши с помощью функции system().
  8. Возвращение 0 в качестве кода успешного завершения программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы