Язык программирования C++ для профессионалов


Массивы


Для типа T T[size] является типом "массива из size элементов типа T". Элементы индексируются от 0 до size-1. Например:

float v[3]; // массив из трех чисел с плавающей точкой: // v[0], v[1], v[2] int a[2][5]; // два массива, из пяти целых каждый char* vpc; // массив из 32 символьных указателей

Можно следующим образом записать цикл, в котором печатаются целые значения прописных букв:

extern "C" int strlen(const char*); // из <string.h>

char alpha[] = "abcdefghijklmnopqrstuvwxyz";

main() { int sz = strlen(alpha);

for (int i=0; i<sz; i++) { char ch = alpha[i]; cout << '\"'<< ch << '\'" << " = " <<int(ch) << " = 0" << oct(ch) << " = 0x" <lt; hex(ch) << '\n'; } }

Здесь функции oct() и hex() выдают свой параметр целого типа в восьмеричном и шестнадцатеричном виде соответственно. Обе функции описаны в <iostream.h>. Для подсчета числа символов в alpha используется функция strlen() из <string.h>, но вместо нее можно было использовать размер массива alpha. Для множества символов ASCII результат будет таким:

'a' = 97 = 0141 = 0x61 'b' = 98 = 0142 = 0x62 'c' = 99 = 0143 = 0x63 ...

Отметим, что не нужно указывать размер массива alpha: транслятор установит его, подсчитав число символов в строке, заданной в качестве инициализатора. Задание массива символов в виде строки инициализатора - это удобный, но к сожалению, единственный способ подобного применения строк. Присваивание строки массиву недопустимо, поскольку в языке присваивание массивам не определено, например:

char v[9]; v = "a string"; // ошибка

Классы позволяют реализовать представление строк с большим набором операций.

Очевидно, что строки пригодны только для инициализации символьных массивов; для других типов приходится использовать более сложную запись. Впрочем, она может использоваться и для символьных массивов. Например:

int v1[] = { 1, 2, 3, 4 }; int v2[] = { 'a', 'b', 'c', 'd' };




Начало  Назад  Вперед



Книжный магазин