русс | укр

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

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

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

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


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

Указатели и спецификатор const


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


Указатели и динамические массивы

Delete указатель;

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

 

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

Формат оператора new для динамического массива:

Тип указатель = new тип [размер];

Формат оператора delete для освобождения памяти занятой динамическим массивом:

delete [] указатель;

Размер в операторе newзаписывается в квадратных скобках и задает число элементов создаваемого массива. В результате выполнения оператора указатель получает адрес нулевого элемента. Следовательно, адрес каждого элемента находится указатель + индоксная, а значение по адресу хранящемуся в указателю, т.е.:

- * указатель + индоксная;

- *указатель[индоксная];

- указатель[индоксная];

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

Пример использования операторов new и delete для динамического массива

#include <iostream>

using namespace std ;

int main ( )

{

// ввод размера массивов

int size ; cout << "Enter size of array -> " ; cin >> size ;

// выделение памяти под массивы

double* pdArray = new double [ size ] ;

int* piArray = new int [ size ] ;

// адреса элементов массивов

cout << "\nAddresses for double\n" ;

for ( int i = 0; i < size; i++ )

cout << ( pdArray + i ) << '\t' ;

cout << "\n\nAddresses for int\n" ;



for ( int i = 0; i < size; i++ )

cout << ( piArray + i ) << '\t' ;

// значения элементов массива целых чисел

cout << "\n\nValues of integer array\n" ;

for ( int i = 0; i < size; i++ )

{

* ( piArray + i ) = i * i ; //piArray[i]

cout << * ( piArray + i ) << "\t\t" ;

}

cout << endl ;

// освобождение памяти

delete [ ] piArray ; delete [ ] pdArray ;

return 0 ;

}

 

Если спецификатор constстоит перед именем типа, то объявляется указатель на константу.

Пример объявления указателя на константу

const char A = 'A' ;

const char* pC = &A ;

const char Z = 'Z' ; pC = &Z ;

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

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

Пример объявления константного указателя

char* const pCH = new char [ 40 ] ;

int * const pi = new int [100];

// константный указатель на константу

const char* const p = "constant pointer on a constant" ;

 

В этом случае, нельзя изменить значение указателя, но можно изменить значение того, на что он указывает. Указатели, которые объявлены константными, должны получить начальное значение при объявлении. Константный указатель всегда указывает на одну и ту же ячейку памяти.

Пример использования указателей со спецификатором const

// Пример указателей с модификатором const

#include <iostream>

using namespace std ;

int main ( )

{

// указатель на константу

cout << "Pointer on constant\n" ;

const char A = 'A' ; const char* pC = &A ;

cout << "I pointer " << &pC ;

cout << "\tmy constant " << *pC << endl ;

// указатель можно изменить

const char Z = 'Z' ; pC = &Z ;

cout << "And now\t\t\tmy constant " << *pC << endl ;

// константный указатель

cout << "\nThe constant pointer" ;

char* const pCP = new char [ 40 ] ;

char s1 [ ] = "As you brew," ;

char s2 [ ] = "so must you drink." ;

strcpy_s ( pCP, 40, s1 ) ;

cout << '\n' << &pCP << " point on ->\t" << pCP ;

// содержимое можно изменить

strcpy_s ( pCP, 40, s2 ) ;

cout << "\nAnd now I point on ->\t" << pCP << endl ;

// константный указатель на константу

const char* const p = "constant pointer on a constant" ;

// освобождение памяти

delete [ ] pCP ;

// ошибки

// *pC = 'Z' ; // *pC - символьная константа

// pCP = new char [ 20 ] ; // pCP - константный указатель

// p = new char [ 40 ] ; // p - константный указатель

// * ( p + 7 ) = 'T' ; // * ( p + 7 ) - константный символ

// delete pC ; // pC - не было new

// delete [ ] s1 ; // s1 - массив

return 0 ;

}

 



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


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


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

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

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


 


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

 
 

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

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