Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Указатели. Пустой оператор представляется символом «;», перед которым нет вы­ра­жения




Пустой оператор

Пустой оператор представляется символом «;», перед которым нет вы­ра­жения. Пустой оператор используют там, где синтаксис языка тре­бует присутствия в данном месте программы оператора, однако по логике прог­раммы оператор должен отсутство­вать.

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

 

Указатель - это адрес памяти. Значение указателя сообщает, где раз­­ме­щен объект, но не говорит о самом объекте. Пере­мен­­ная типа ука­за­­тель описывается так: <тип> * <переменная-указатель>. Данная запись означает, что переменная-указатель является указателем на любую переменную указанного типа.

Символ операции « (звез­дочка) используется для задания указателя на объект.

Пример: int *х; // указатель на любую переменную типа int. Указатель на тип void совместим с любым указателем.

Пример: void *х; int *y; // допустимо присваивание: y = x.

Двумя наиболее важными операциями, связанными с указателями, являются операция обращения по адресу (разадре­сации) и операция опре­де­ления адреса. Операция обращения по адресу (*) служит для прис­ваива­ния или счи­тывания значения переменной, размещенной по адресу «переменная‑ ука­затель» (*ptr_var = value).

Пример. Предложение *х=16 означает, что по адресу, зада­ваемому в х, помещается значение 16.

Операция определения адреса возвращает адрес памяти своего опе­ранда. Операндом должна быть переменная. Операция определения ад­реса выполняется следующим образом:

<указатель-переменная> = & <переменная>;

Пример. Запись a=*&b равносильна записи a=b.

Для определения адреса массива операцию & можно не указывать перед его именем.

Если переменная, например, ptr определена как указатель на струк­ту­ру, то для дос­тупа к полю структуры (field); можно ис­пользовать опера­цию -> в виде: ptr->field, которая эквивалентна выражению (*ptr).field.

Существует четыре способа задать переменной-указателю начальное значение:

• описать указатель вне любой функции или снабдить его предписанием static. Начальным значением явля­ется нулевой адрес памяти ‑ 0;

• присвоить указателю адрес переменной;

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

• использовать операторы распределения памяти new и delete.

Операция динамического выделения памяти имеет вид:

<указатель-переменная> = new [ < имя переменной>] [<тип переменной>];

Операция возвращает нулевое значение, если не может выделить па­мять.

Операция освобождения выделенной памяти имеет вид:

delete <указатель-переменная>.

Примеры:

ptr=new int [3];// выделение памяти для массива из трех элементов типа int

ptrf=new float[3][5];// выделение памяти для массива 3 на 5 чисел типа float

ptrstack=new stack; //выделение памяти для структуры (записи) stack

delete ptrstack; // освобождается память выделенная ранее по адресу ptrstack

Пример динамического формирования и вывода стека (п. 1.9.3):

int main(int argc, char **argv) { // создание и вывод стека из чисел 1,2,3,4,5

struct stack { int inf; stack* next;}; // объявление структуры (записи) stack

stack *top=0,*kon,*del; //объявление переменных-указателей на запись stack

for (int i=1;i<=5;i++) // цикл формирования стека из пяти записей

{ kon=new stack; // выделение памяти для новой записи

kon->next=top; kon->inf=i; //запоминание адреса предыдущей записи

top=kon; // запоминание адреса последней записи (вершины стека)

} // конец цикла формирования стека

kon=top; // установка адреса вершины стека (последней записи стека)

while (kon!=0) // цикл вывода записей стека на экран (cout <<) (п. 6.5.2)

{cout<<kon->inf<<endl;del=kon;kon=kon->next;delete del;} //вывод 5,4,3,2,1

getch(); return 0; } // задержка и завершение работы функции




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


Дата добавления: 2014-12-08; Просмотров: 478; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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