
4. Составные типы.
Указатели. Управление динамической памятью с помощью new и delete. Цикл for. Цикл while. Цикл do while. Метод ввода символов get(). Условие конца файла.
// pointer.ерр -- наша первая переменная-указатель
#include <iostream>
int main()
{
using namespace std;
int updates =6; // объявление переменной
int * p_updates; // объявление указателя на int
p_updates = &updates; // присвоить адрес int указателю
// Выразить значения двумя способами
cout « "Values: updates = " « updates;
cout << ", *p_updates = " << *p_updates << endl;
// Выразить адреса двумя способами
cout « "Addresses: &updates = " « &updates;
cout << ", p_updates = " << p_updates << endl;
// Изменить значение через указатель
*p_updates = *p_updates + 1;
cout << "Now updates = " << updates << endl;
return 0;
}
// use_new.cpp -- использование операции new
#include <iostream>
Int main()
{
using namespace std;
int nights = 1001;
int * pt = new int; // выделение пространства для int
*pt = 1001; // сохранение в нем значения
cout << "nights value = "; // значение nights
cout << nights << " : location " << &nights << endl; // расположение nights
cout « "int "; // значение и расположение int
cout << "value = " << *pt << " : location = " << pt << endl;
double * pd = new double; // выделение пространства для double
*pd = 10000001.0; // сохранение в нем значения double
cout « "double ";
cout << "value = " « *pd << ": location = " « pd « endl;
// значение и расположение double
cout << "location of pointer pd: " << &pd << endl;
// расположение указателя pd
cout << "size of pt = " << sizeof(pt); // размер pt
cout « " : size of *pt = " « sizeof(*pt) « endl; // размер *pt
cout « "size of pd = " « sizeof pd; // размер pd
cout « ": size of *pd = " « sizeof (*pd) « endl; // размер *pd
return 0;
}
// arraynew.cрр -- использование операции new для массивов
#include <iostream>
Int main()
{
using namespace std;
double * p3 = new double [3]; // пространство для 3 значений double
p3[0] = 0.2; // трактовать р3 как имя массива
p3[l] = 0.5;
p3[2] = 0.8;
cout « “р3[1] is " « р3[1] « ".\n”; // вывод р3[1]
р3 = р3 + 1; // увеличение указателя
cout << "Now p3[0] is " << р3[0] « " and”; // вывод р3[0]
cout << “р3[1] is " « р3[1] « ".\n" ; // вывод р3[1]
р3 = р3 - 1; // возврат указателя в начало
delete [] р3; // освобождение памяти
return 0;
}
// ptrstr.cpp -- использование указателей на строки
#include <iostream>
#include <cstring> // объявление strlen(), strcpy()
Int main()
{
using namespace std;
char animal[20] = "bear"; // animal содержит bear
const char * bird = "wren"; // bird содержит адрес строки
char * ps; //не инициализировано
cout « animal << " and "; // отображение bear
cout « bird << "\n"; // отображение wren
// cout << ps << "\n"; // может отобразить мусор, но может вызвать
// и аварийное завершение программы
cout « "Enter a kind of animal: ";
cin » animal; // нормально, если вводится меньше 20 символов
// cin >> ps; очень опасная ошибка, чтобы пробовать;
// ps не указывает на выделенное пространство
ps = animal; // установка ps в указатель на строку
cout « ps « "!\n"; // нормально; то же, что и применение animal
cout « "Before using strcpy():\n";
cout << animal << " at " << (int *) animal << endl;
cout « ps « " at " « (int *) ps « endl;
ps = new char[strlen(animal) +1]; // получение нового хранилища
strcpy(ps, animal); // копирование строки в новое хранилище
cout « "After using strcpy():\n";
cout << animal << " at " << (int *) animal << endl;
cout « ps « " at " « (int *) ps « endl;
delete [] ps;
return 0;
}
// newstrct.cpp -- использование new со структурой
#include <iostream>
struct inflatable // определение структуры
{
char name[20];
float volume;
double price;
};