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

Int test; // объявили целочисленную переменную

Int & s_test; // ошибка! ссылка не связана с переменной

double & d_test=test; // ошибка! тип ссылки не совпадает с типом

// переменной, на которую ссылается

int & t_test=test; // теперь верно!

Ссылки чаще всего используются в качестве параметров функций и типов возвращаемых функциями значений. Об этом подробнее будет сказано в главе 4.

Адрес переменной нельзя изменить, это константа, однако в С++ определен специальный тип переменных – указатель, который хранит адрес или местоположение переменной в оперативной памяти.

Указатель не является самостоятельным типом, он всегда связан с типом переменной, на которую ссылается. Применяя к указателю операцию * , которая называется разыменованием, получаем значение, которое хранится по данному адресу.

  • Не удивляйтесь, что один и тот же символ используется для операции умножения и разыменования. Смысл символа понятен из контекста, в котором он применяется.

Следующий листинг поясняет использование указателей.

Int *p1; // объявлен указатель на целое с именем p1

double *p_up; // объявлен указатель на вещественное число

int i =12;

p1 = &i; // указателю p1 присваиваем адрес переменной i;

// выводим значения i двумя путями:

cout<<*p1<<endl;

cout <<i;

// изменяем значение переменной i с помощью указателя

*p1 = 23;

cout << i;

  • Обратите внимание, что компилятору следует знать, на какой тип переменной ссылается указатель, так как количество байт, отводимое под различные типы переменных, различно.

Работу с переменной, адресом переменной и указателем на переменную можно проиллюстрировать схемой:

П рисваивая указателю адрес переменной, мы даем переменной «псевдоним», с помощью которого получаем доступ к значению переменной.

При объявлении указателя возможны различные способы расположения знака * и пробела:

char *str;

float* param;

long * ini;

Выберите любой вариант по своему вкусу. Например, комбинация char *str; подчеркивает, что *str является переменной типа char. Важно только помнить, что объявление вида

int* pi, ni;

создает указатель pi и обычную переменную ni типа int. То есть необходимо использовать * для каждого объявления указателя!

3.2. Массивы и строки.

  • Массив ‑ это совокупность однотипных элементов (int , double, char и т.д.).

Для определения целочисленного массива в C/C++ надо написать:

Int z[10]; //массив из 10 целых чисел

Общее форма для объявления массива:

typename arrayName[arraysize];

Здесь typename - тип элементов массива (double, float и т.д.), arrayName ‑ имя массива, arraysize ‑задает число элементов массива и должно быть типа const, либо постоянным выражением, для которого все значения должны быть известны уже во время трансляции1.

Ниже приведенный листинг показывает примеры верного и неверного объявления массивов.

Int ar[3]; // объявлен целочисленный массив из 3 элементов

const int k=11; // объявлена целочисленная константа к

int n, m=4; // объявлены переменные типа целое

n=12;

double z[k],y[3*k]; // верное объявление массивов

double nz[n], ny[m]; // неверное объявление массивов

Элементы массивов в C/C++ всегда нумеруются с нуля. Таким образом, в приведенном в начале параграфа примере массив будет состоять из целочисленных элементов z[0], z[1], z[2], ...z[9]. Индекс внутри квадратных скобок позволяет обратиться к любому элементу массива. При объявлении массива можно сразу инициализировать его элементы:

double mass[3]={1.1, 11.24, 0.45};

Не будет ошибкой и такой вариант инициализации:

int arr[]={14, 0, 6, 12};

В этом случае компилятор самостоятельно подсчитает количество элементов объявленного массива.

При работе с массивами следует помнить, что арифметические операции, как и операцию присваивания, возможно применять только для элементов массива.

int arr[]={14, 0, 6, 12}; // объявление и инициализация массива

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