пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Организация динамического массива в С

белая методичка страница 26

Динамическими называют такие массивы, для которых количество их элементов заранее не известно и оперативная  память для них выделяется в процессе выполнения программы. Рассмотрим построение динамических массивов в Си++ с помощью указателей и оператора new. Ниже приводится пример программы, реализующей создание двух динамических массивов целых чисел: одномерного массива с числом элементов, равных К (вводится с клавиатуры) и двумерного массива с числом строк N и числом столбцов M (также вводятся с клавиатуры). Первый массив создается с помощью указателя p, второй – с помощью указателя p2. Указатель p2 является указателем на указатель типа int ( в соответствии с объявлением int **p2;).

#include<stdio.h>

#include<conio.h>bv

void main ()

{

  int *p;

  int **p2;

  int i,j,K,N,M;

  clrscr();

  printf("***array1 ***\n");

  printf("K = ");

   scanf("%d", &K);

  p = new int[K];

    for (i=0; i<K; i++)

  {

    p[i] = i+3;

    printf("%d   ",p[i]);

   }

  printf("\n***array2 ***\n");

  printf("N = ");

  scanf("%d",&N);

   printf("M = ");

  scanf("%d",&M);

  p2 = new int * [N];

  for (i=0;i<N;i++)

  { p2[i] = new int[M];

  for (j=0;j<M;j++)

  { p2[i][j] = i + j;

 

printf("%d  ", p2[i][j]);

  }

  printf("\n");

  }

  getch();

}

 

В результате выполнения этой программы при К = 6, N = 3 и M = 4 на экране получим следующую информацию:

 
 

***array1 ***
К = 6

3 4 5 6 7 8

***array2 ***

N = 3

M = 4

0 1 2 3

1 2 3 4

2 3 4 5

 

 

 

 

 

 

 

 

 

 

Рис.5. иллюстрирует процесс создания двух динамических массивов. Для создания двумерного массива вначале выделяется свободное место в памяти компьютера для массива указателей на int и определяется  значение (оператор p2 = new int * [N];, а непосредственно после выполнения этого оператора значение p2 равно адресу нулевого участка выделенной памяти). Затем выделяется свободное место для каждой строки матрицы и определяется значение каждого i -го указателя на int (оператор p2[i] = new int [M];,  а непосредственно после выполнения этого оператора значение p2[i] равно адресу нулевого участка, выделенной для p2[i] области). На рис.5. показано состояние указателей непосредственно после выполнения операторов  new, в этот момент значения выделенных участков еще не определены.

это так на всякий случай

В заключение раздела отметим следующее:

  • Указатели – это, такие объекты программы, значения которых являются адреса других объектов, в том числе и самих указателей. Описание указателей для элементарных данных осуществляется с указанием типа объектов, на которые может указывать указатель:
    int *p1;//– указатель на объект типа int
    float *p2;// - указатель на объект типа float
    float **p3;// - указатель на указатель на объект типа float
    void *p4;// - указатель на объект без информации о типе указываемого объекта
  • Для указателей применяются операции: разыменования, преобразования типа, присваивания, получения адреса, сложения и вычитания, инкремента и декремента, отношений.
  • Массивы – это объекты программы, состоящие из однотипных элементов, которые располагаются в оперативной памяти на соседних участках. Число индексов и диапазоны их значений должны быть заранее известны (эта информация указывается при объявлении массива). Примеры объявлений:
    int f[10];// одномерный массив f из 10 элементов типа int, индекс может иметь               // значения от 0 до 9
    char s[15];// одномерный массив s из 10 элементов типа char, индекс может иметь           // значения от 0 до 14
    double V[3][4];// двумерный массив  V из 3 строк и 4 столбцов,  первый индекс может принимать значения от 0 до 2, второй – от 0 до 3; каждый элемент массива типа doublе.
  • Транслятор языка Си воспринимает только  одномерные массивы. Однако элементами одномерного массива в свою очередь могут быть одномерные массивы, поэтому двумерные массивы – это массивы массивов, трехмерные – массивы массивов,  у которых, опять же, элементами являются одномерные массивы, и т. д. 
  • Обращение к элементам массива осуществляется с помощью переменных с индексами (f[i], s[5], V[i][k]) или с помощью указателей (*( p1 +i) или p1[i],*(p3[i] + j) или p3[i][j] ). При обращении с помощью указателей должны быть выделены участки памяти для размещения соответствующих массивов с помощью оператора new.
  • С помощью указателей возможно реализовать динамические массивы (массивы с заранее неизвестной размерностью).

21.06.2017; 17:07
хиты: 80
рейтинг:0
Точные науки
информатика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь