Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Операция new



Операция new — один из способов определения значения переменной указателя. Ее синтаксис такой: указатель = new имя_типа; Например, если объявлен указатель float *p; то операция p=new float; выполняет следующее:

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

2. Кроме этого, в случае успешного выполнения операция new возвращает адрес начала выделенного участка. В примере значение этого адреса присваивается переменной-указателю (переменной p).

Но значение выделенной ячейки, которое в программе обозначается *p, после выполнения этой операции ещё не определено. Поэтому cout<<(*p) выведет случайное число. Для задания значения *p надо выполнить, например, ввод cin >> (*p); или использовать другой способ (присваивание, получение с помощью функции и т. п.). Обратим внимание, что речь идёт об определении *p, а не p. Поэтому напомним, что cin>>p; или p=1.1; ошибочны.

Если участок нужных размеров не может быть “найден”, то операция new возвращает нулевое (точнее, неопределённое) значение адреса. Оно обозначается в программе константой NULL, которая записывается обязательно большими буквами. Тогда в программе после p=new float; желательно записать:

if (p==NULL) // или if (!p)

{ cout<<”\nError”; getch(); exit(0) ;}.

Как нулевое числовое значение, так и значение NULL для указателей равносильно false в операциях сравнения.

Стандартная функция exit(0) прекращает выполнение всего проекта. Она более “сильная” по сравнению с оператором return, так как осущетвляет выход не только из функции, где записана, а останавливает работу всего проекта. Заметим, что самым “слабым” в этой группе является оператор break, который прерывает всего лишь цикл или оператор выбора switch, продолжая выполнение функции, если цикл или switch не были последними в ней.

С помощью рассматриваемой операции new можно проинициализировать не только значение указателя, но и задать значение выделенной ячейки памяти. В таком случае операция применяется так: указатель = new имя_типа(значение);. Например, p=new float(3.1); определяет как значение указателя p, так и значение *p. Это равносильно p=new float; *p=3.1; Заметим, что значение записывается в круглых, а не в квадратных скобках. Квадратные скобки будем позже использовать для создания динамического массива. Но динамический массив так инициализировать нельзя! (см. следующую главу). Доступ к переменной, адрес которой находится в p, выполняется операцией “*” (разыменование). Поэтому cout<<p<<” “ <<(*p); выведет шестнадцатеричный адрес и число 3.1.





Дата публикования: 2015-02-18; Прочитано: 299 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...