Два способа для работы с динамическими переменными. — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Два способа для работы с динамическими переменными.

2017-06-02 222
Два способа для работы с динамическими переменными. 0.00 из 5.00 0 оценок
Заказать работу

 

1. Резервирование памяти под дин. переменные производится с помощью операции new <тип>; где <тип>, - тип динам. переменной; new, - знак операции. Результат операции – адрес области памяти (указатель); операнд – любой тип в TC.

 

Пример:

 

float *p;

p=new float;

*p, - динамическая переменная.

 

Резервирование памяти под динамические переменные – “захват”.

 

<освобождение памяти>≡delete <выр.>.

 

Выражение должно иметь тип указатель.

 

 

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

 

Динамические массивы – массивы, под которые выделяется область памяти “куча”. Работать с такими массивами так же, как и с динамическими переменными.

 

Резервирование памяти производится с помощью операции new <тип> []. Результат операции – адрес области памяти (указатель); операнд – любой тип в TC.

 

Пример:

 

a=new float [10], - захват памяти под 10 элементов действительного типа; значение a – указатель; работа с такими массивами так же, как и со статичными.

 

<освобождение памяти>≡delete [] <выражение>; при этом выражение должно иметь значение указателя на динамический массив.

 

NULL, - отсутствие ссылки; принадлежит любому значению типа указатель.

 

Списки.

 

Teg – описание структуры.

 

<определение типа структура с помощью тега>≡

struct <идент.>

{

<резервирование памяти>;

{ < резервирование памяти >; }

};

 

Пример: Определим тип элемента односвязного списка.

 

struct tinfo

{

float x, y;

}

struct tel

{

tinfo info;

tel *link;

}

typedef tel* ptel;

 

Организация односвязного списка по принципу ссылки вперед.

 

Пример:

b, t, p – указатели на первый, текущий и на предшествующий элементы соответственно.

 

Блок – схема:

 

 

 

Текст программы:

 

void VVKL (ptel &b, int &n)

{

ptel t, p;

n=0;

do

{

t=new tel;

n++;

cout<<”Znachenie pervogo chlena? ”;

cin>>t->info.x;

cout<<” Znachenie vtorogo chlena? ”;

cin>>t->info.y;

if (n==1) b=t; else p->link=t;

p=t;

}

while (printf(“Prodolgit’ vvod? y/n? ”)&&getchar()==’y’);

t->link=NULL;

}

 

 

Файлы.

 

Файл – упорядоченная совокупность произвольного числа компонентов, расположенная на внешнем запоминающем устройстве, и имеющая имя, называемое физическим именем файла. В программе файлу соответствует внутреннее логическое имя файла <идент.>. На языке С файл имеет сложную организацию и рассматривается как структура.

Работа с файлами в С реализуется через буфер. В С существует два вида файлов: текстовые и бинарные (двоичные). Текстовый – это файл, содержащий текстовые данные, как правило, организованные в виде строк. Бинарный (двоичный) – это файл, содержащий последовательность произвольных байтов. Байты состоят из бит, т.е. двоичных цифр. Текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл.

Внутреннее логическое имя файла <идент.> должно быть объявлено в программе:

<резерв. памяти под указатель на буфер файла>≡FILE* <идент.>

Например:

FILE *prfl;

после объявления имя prfl будет являться указателем на некоторый файл.

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

 

 

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

<открытие файла >≡fopen(“<имя файла>; <атрибут файла>”)

атрибуты: w - чтение, r - запись, q;

значение функции – указатель на буфер.

<идент.>≡fopen (“имя файла”, “<атрибут>”); - связывает имя файла с буфером.

 

Для работы с существующим файлом можно использовать следующую структуру

if ((<идент.>=fopen(“<имя файла>”,”r”))!=NULL)

{

//работа с файлами//

}

else

cout<<”fayl ne nayden”<<endl;

 

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

<закрытие файла >≡fclose(<идент>)

Она возвращает значение 0, если файл закрыт успешно, и ненулевое значение в противном случае.

 

Функции 1 и 2 работают с текстовыми файлами с буферизацией. Под буферизацией понимается то, что вводимые и выводимые данные запоминаются во временно области памяти, называемой буфером. Функция fclose() позволяет освободить частично заполненный буфер при закрытии файла, иначе информация может быть потеряна.

 

3.Функции форматированного ввода и вывода в файл имеют следующий вид: <форматированный вывод в файл>≡fprintf(<идент.>,<шаблон вывода>,<список вывода>);

<форматированный ввод из файла>≡fscanf(<идент.>,<шаблон вывода>,<список вывода>)

Действие этих функции аналогично действию функций scanf() и printf(), но здесь дополнительно вводится указатель на файл <идент.>, который в отличие от предыдущих функций используется в качестве первого аргумента.

 

getc(), - функция, считывающая символ, на который указывает указатель чтения.

 

Пример:

getc()!=EOF.

 


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.