КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |