русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Динамические массивы


Дата добавления: 2013-12-23; просмотров: 1062; Нарушение авторских прав


Строки

P=a;

Массивы и указатели

Имя массива, используемое внутри выражения без [] является указателем на первый элемент массива (элемент с индексом 0). Данный указатель является константным, т.е. его значение нельзя изменять.

Для некоторого массива, например

int A[10];

выполняется равенство A==&A[0]

Доступ к элементу массива возможен или через индексное выражение или через операцию обращения по адресу.

for (int i=0; i<10; i++) A[i]=2*i;

for (int i=0; i<10; i++) *(A+i)=2*i; // Наличие скобок обязательно,

// так как приоритет операции * выше, чем операции +

Кроме того имя массива без скобок является указателем, тип которого соответствует указателю на тип элемента массива. Допустим следующий порядок работы с массивом:

int a[10];

int *p;

for(int i=0; i<10; i++) p[i]=i*i;

или

for(int i=0; i<10; i++) *(p+i)=i*i;

 

Строка– это символьный массив, заканчивающийся символом с кодом 0 (символ NULL) – это служебный символ, являющийся признаком конца строки.

Практически все стандартные функции, работающие со строками, используют это свойство для определения конца строки.

Примеры:

char str[]=“ABCD”; // Это строка, выделяется память под 5 символов (последний 0)

char c[]={‘A’, ‘B’, ‘C’, ‘D’ }; // Это просто массив из 4-х символов

char *s=“Пример строки”; // Допустимо такое определение строки

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

int len=0; // Длина строки

for(; s[len]; len++) ;

 

Память для массива может выделяться и уничтожаться динамически с помощью специальных функций, например, для выделения памяти могут использоваться функции: malloc, calloc, realloc, а для освобождения памяти функция free (в Си++ существуют специальные операторы new и delete). Особенно это удобно в том случае, когда число элементов заранее не известно, а становится известным только во время выполнения программы, например, число элементов может вычисляться при работе программы, вводится с клавиатуры и т.д.



Функция malloc имеет заголовок, определенный в заголовочном файле stdlib.h:

void * malloc(unsigned int _Size);

Данная форма заголовка является упрощенной, функция имеет один параметр, определяющий размер выделяемой динамически области памяти в байтах, функция возвращает указатель на выделяемую область памяти, тип указателя void *, что обеспечивает его неявное приведение к указателям на любые стандартные типы.

Возвращает выделенную память обратно операционной системе функция с упрощенным заголовком (заголовочный файл stdlib.h):

void free(void * _Memory);

Функция имеет один параметр – указатель на блок освобождаемой памяти.

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

#include <stdio.h>

#include <stdlib.h>

void main()

{

int *p; // Указатель, может быть использован для выделения памяти под массив динамически

int n; // Заранее неизвестное число элементов массива

int i; // Индексная переменная

printf("n="); scanf("%d", &n); // Ввод с клавиатуры числа элементов массива

p=malloc(n*sizeof(int)); // Выделяем память под массив динамически

// Заполняем массив случайными числами и печатаем его

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

{

p[i]=rand() % 100; // Получаем псевдослучайное целое число в интервале

// 0..99

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

}

free(p); // Возвращаем выделенную память операционной системе, когда она не нужна

}

 



<== предыдущая лекция | следующая лекция ==>
Инициализация массива | Динамические многомерные массивы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.