Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
zan_4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
54.78 Кб
Скачать

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;

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]