Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Динамическое размещенея данных
В языке Си есть операция, с помощью которой можно определить размер участка памяти в байтах, который компилятор отводит под массив после его объявления, это операция sizeof.Формат записи: sizeof(параметр); параметр – тип объекта или его идентификатор (только не имя функции). Операция sizeof позволяет определить размер объекта по имени или типу, результатом является размер памяти в байтах (тип результата int). Если указан идентификатор сложного объекта (массив, структура, объединение), то получаем размер всего сложного объекта. Например: sizeof(int) -> 2 байта, int b[5]; sizeof(b) -> 10 байт; int c[3][4]; sizeof(c) -> 24 байта. Операция sizeof применяется при динамическом распределении памяти: float *x; // Указатель массива int n; // Количество элементов массива x=(float*)calloc(n,sizeof(float)); // Захват и очистка памяти Прототипы функций работы с памятью находятся в библиотеке alloc.h, рассмотрим основные из них: void *calloc(unsigned n, unsigned m); - возвращает указатель на начало области памяти для размещения n элементов по m байт каждый, при неудачном завершении возвращает значение NULL; void *malloc(unsigned n); - возвращает указатель на блок памяти длиной n байт, при неудачном завершении возвращает значение NULL; void *realloc(void *bf, unsigned n); - изменяет размер ранее выделенной памяти с адресом начала bf на n байт; void free(void *bf); - освобождает ранее выделенный блок памяти с адресом bf; coreleft(void); - возвращает значение объема неиспользованной памяти (тип возвращаемого результата unsigned – для моделей памяти tiny, small, medium; unsigned long – для других моделей памяти).
Приведем пример динамического размещения одномерного массива #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<alloc.h> void main(void) { int i,n; float *a; puts(“\n Input n:”); scanf(“%d”,&n); printf(“\n Свободная память -%d”,coreleft()); a=(float *)calloc(n,sizeof(float)); // захват памяти printf(“\n Array a \n”); for(i=0; i<n; i++) { *(a+i)=(float)random(10); // диапазон от 0 до 10 printf(“ %d“, a[i]); } printf(“\n Память после захвата -%d”,coreleft()); free(a); // освобождение памяти getch(); }
|
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 198. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |