Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_7_var.doc
Скачиваний:
1
Добавлен:
03.09.2019
Размер:
601.09 Кб
Скачать

Указатели

Указатель – переменная, которая указывает на другую переменную (содержит местоположение другой переменной в форме адреса). В этом смысле имя переменной «отсылает» к ёё значению непосредственно, а указатель – косвенно. Ссылка на значение указателя называется косвенной адресацией.

Указатели, подобно любым другим переменным, перед своим использованием должны быть объявлены. При объявлении переменной типа указатель, необходимо определить тип объекта данных, адрес которых будет содержать переменная, и имя указателя с предшествующей звездочкой (или группой звездочек). Формат объявления указателя:

тип_данных *имя_указателя

Тип_данных задает тип объекта и может быть любого базового типа, типа структуры или совмещения (об этом будет сказано позже). Задавая вместо типа ключевое слово void, можно таким образом отсрочить спецификацию типа, на который ссылается указатель. Переменная, объявляемая как указатель на тип void, может быть использована для ссылки на объект любого типа. Однако для того, чтобы можно было выполнить арифметические и логические операции над указателями или над объектами, на которые они указывают, необходимо при выполнении каждой операции явно определить тип объектов. Такие определения типов может быть выполнено с помощью операции приведения типов.

*- означает, что следующая за ней переменная является указателем. Переменная, объявленная как указатель, хранит адрес памяти. Указатели на различные типы не обязательно имеют одну и ту же длину.

Понятие статической и динамической памяти

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

Существует два способа закрепления оперативной памяти за величинами, которые будут использоваться в программах. Обычно применяют так называемый статический способ. При использовании этого способа память для каждой величины остается занятой ею в течение всего времени работы программы. При таком способе иногда бывает неудобно, когда в одной программе надо обрабатывать различное количество данных. Например, с массивами разных размеров. В этом случае для универсальности программы надо при объявлении массива учитывать максимально возможное количество его элементов. А это приводит к неэффективному использованию памяти.

При динамическом способе закрепления оперативной памяти сама программа может выделять и освобождать необходимую память для данных, т.е. управлять размещением используемых в ней данных в оперативной памяти. Например, если вещественная переменная Х используется только на одном из этапов работы программы, то можно с началом этого этапа закрепить за ней память размером в 6 байт, а после завершения этапа освободить для использования другими данными. Таким образом, можно организовывать динамические, т.е. изменяющие размеры, структуры данных. При этом оперативная память используется более эффективно. Такая возможность связана с наличием в C++ особенного типа данных – указателей.

Область оперативной памяти, в которой можно выделять отдельные участки для размещения данных, называется динамической областью памяти, или динамической памятью.

Такие действия предполагают возможность работы с адресами величин (переменных массивов и других данных), размещаемых в оперативной памяти.

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

Файлы

Текстовые файлы в С

В языке С файл рассматривается как поток представляющий собой последовательность байтов.Информация офайле заносится в переменную типа FILE. Этот тип объявляет указатель потока, который используется далее во всех операциях с файлом. Тип FILE определяет в библиотеке stdio.h. Поэтому, в программе предполагается работа с файлами, то необходимо подключить библиотеку stdio.h :

#include <stdio.h>

Теперь можно описать переменную-указатель потока:

FILE*f;

Функция fopen открывает файл. Синтаксис функции fopen:

FILE*fopen(const char*filename,const*mode);

Первый параметр filename определяет имя открываемого файла. Второй параметр mode задает режим открытия файла:

r

Открыть файл только для чтения

r+

Открыть существующий файл для чтения и записи

a

Открыть или создать файл для записи данных в конец файла

a+

Открыть или создать файл для чтения или записи данных в конец файла

w

Создать файл для записи

w+

Создать файл для чтения

К указанным спецификаторам в конце или перед знаком «+» может добавляться символ «t»-текстовый файл или «b»-бинарный (двоичный) файл.

Функция fopen возвращает указатель на объект, управляющий потоком.

Если файл открыть не удалось, fopen возвращает нулевой указатель NULL.

Прекратить работу с файлом можно при помощи функции fclose(FILE*).

Эта функция закрывает файл, на который ссылается параметр функции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]