русс | укр

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

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

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

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


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

Инициализация указателей

Указатели чаще всего используют при работе с динамической памятью, называемой некоторыми программистами кучей (перевод с английского языка слова heap). Это свободная память, в которой можно во время выполнения программы выделять место в соответствии с потребностями. Доступ к выделенным участкам динамической памяти, называемым динамическими переменными, производится только через указатели. Время жизни динамических переменных – от точки создания до конца программы или до явного освобождения памяти. В С++ используется два способа работы с динамической памятью. Первый использует семейство функций mal1ос (calloc)и достался в наследство от С, второй использует операции newи delete.

При определении указателя надо стремиться выполнить его инициализацию, то есть присвоение начального значения. Непреднамеренное использование неинициализированных указателей – распространенный источник ошибок в программах. Инициализатор записывается после имени указателя либо в круглых скобках, либо после знака равенства.

Существуют следующие способы инициализации указателя:

присваивание указателю адреса существующего объекта:

• с помощью операции получения адреса

int а = 5; // целая переменная

int* p= &a; // в указатель записывается адрес а

int* р (&a); // то же самое другим способом

• с помощью значения другого инициализированного указателя:

int* r = р;

• с помощью имени массива или функции, которые трактуются как адрес :

int b[10]:

int* t = b; // присваивание адреса начала массива

void f(int а ) {(/* ... */ } // определение функции

void (*pf)(int); // указатель на функцию

рf=f; // присваивание адреса функции

Присваивание указателю адреса области памяти в явном виде:

char* vp = (char *) 0xB8000000;

Здесь 0хВ8000000 ––шестнадцатеричная константа, (char *) –– операция приведения типа: константа преобразуется к типу «указатель на char».

Для примера определим указатель – константу key_byteи свяжем его с байтом, отображающим текущее состояние клавиатуры ПЭВМ IBM PC:

char * const key_byte =(char *)1047;

Значение указателя невозможно изменить, он всегда показывает на байт с адресом 1047 (шестнадцатеричное представление 0х417). Это так называемый байт состояния клавиатуры. Так как значение указателя-константы изменить невозможно, то имя указателя-константы можно считать наименованием конкретного фиксированного адреса участка основной памяти. Содержимое этого участка с помощью разыменования указателя-константы в общем случае доступно как для чтения, так и для изменений. Следующая небольшая программа демонстрирует это.

#include <iostream.h>
void main()
{char *const key_b=(char *)1047;
cout<<"\n Байт состояния клавиатуры – "<< *key_b;
*key_b='Ё';
cout<<"\n Байт состояния клавиатуры – "<< *key_b;
}

Присваивание пустого значения

int* suxx = NULL
int* rulez = 0;

В первой строке используется константа NULL, определенная в некоторых заголовочных файлах С как указатель, равный нулю, хотя можно использовать и просто 0.

Выделение участка

• c помощью операции new, синтаксис:

new имя_типа

или

Просмотров: 485


Вернуться в оглавление



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


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

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

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


 


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

 
 

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