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

7.7 Массивы в динамической памяти

С помощью операции new можно размещать массивы в динамической памяти. Следующий оператор размещает массив из 50 элементов типа long.

long *s = new long[50];

Память выделяется порциями по 8 байт. При выделении блока памяти запоминается его размер. Это позволяет освобождать ее оператором

delete[] s;

З а д а ч а. Ввести 10 чисел и разместить их в динамической памяти.

З а д а ч а. Опишите тип “массив из 100 вещественных чисел”, указатель на этот тип и выделите память под один элемент данного типа.

Р е ш е н и е.

void main() {

float *c;

c = new float[100];

c[1] = 10;

delete [] c;

}

З а м е ч а н и е. Работая с динамической памятью, полезно знать количество свободной памяти. Его возвращает функция coreleft() (заголовочный файл alloc.h).

Вопросы

1. Что такое указатель ?

2. Как возникают значения указателя ?

3. Зачем нужен спецификатор typedef ?

4. Какие адресные константы существуют в С++?

5. Каков смысл сложения указателя с целым числом ?

6. Каков смысл разности указателей ?

7. Что такое разыменование ?

8. Что такое разадресация ?

9. Каков тип значения операции new ?

10. Что означает константное выражение в описании массива ?

11. Перепишите выражение V[3][5], не используя квадратных скобок.

12. Как разместить массив в динамической памяти ?

13. Как удалить массив из динамической памяти ?

8 Строки и структуры

8.1 Встроенный тип char

Значениями типа char являются целые числа со знаком (signed char) или без знака (unsigned char), которые помещаются в один байт. От других целых типов его отличает наличие символических констант вида

'A' — для изображаемых символов, '\ooo' и '\xhhh' — для всех символов без исключения,

где ооо — 8-ичные, а hhh — 16-ичные цифры.

Несколько символов имеют собственные имена :

\n — новая строка

\t — горизонтальная табуляция

\v — вертикальная табуляция

\b — возврат назад

\r — возврат каретки

\a — звонок (attention)

\\ — обратная косая черта

\' — одинарная кавычка

\"— двойная кавычка

З а м е ч а н и е. Значения типа char, выводимые в выходной поток cout, выглядят как символы, а не как числа, только благодаря определению класса cout.

8.2 Строки символов как массивы

Строка имеет тип “массив из символов”. Строка завершается нулевым символом. Например, строка "QWERTY" имеет тип char [7], пустая строка “” имеет тип char[1].

Строковая константа — это последовательность символов, заключенная в двойные кавычки. В числе символов строки могут находиться любые символьные константы, например,

"Звонок в конце сообщения\007\n".

Соседние строковые константы транслятором “склеиваются”. Например,

"АБВ" "ГДЕ" означает то же, что "АБВГДЕ".

Строковые константы можно использовать для инициализации символьных массивов. Например, так можно определить массив s из 7 символов и инициализировать его:

char s[] = "АБВГДЕ";

З а д а ч а. Задана строка. Скопировать ее в символьный массив. Для контроля вывести в стандартный выходной поток строку и массив.

Р е ш е н и е.

#include <iostream.h>

void main(){

char s1[ ]="1234567890", s2[11];

for (int i = 0; s1[i]; i++) s2[i] = s1[i];

s2[i] = 0;

cout << s1 << ' = ' << s2 << '\n';

}

Программу можно сделать немного короче, переписав оператор цикла:

for (int i = 0; s2[i]=s1[i]; i++);

Если вспомнить об указателях на символы, можно написать и так:

for (char *p1 = s1, *p2 = s2; *p2++=*p1++;);

З а м е ч а н и е. Запятая в С является не только разделителем, но и оператором последовательного выполнения. Значением этой операции является значение самого правого операнда.

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