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

5.2. Ссылки

В языке Си++ дополнительно к типам, существующим в языке Си, появился еще один новый тип, так называемые, ссылки. Его иногда удобно использовать в качестве параметров функции. Формат этого типа следующий:

<type> & <имя_ссылки>=<инициализатор>;

Инициализация обязательна, в качестве инициализатора выступает объект, уже размещенный в памяти. Ссылка представляет второе имя уже существующего объекта, ссылка по своей сути является указателем, но к ней нет необходимости применять операцию * (обращение по адресу) при обращении к объекту, любое обращение к ссылке приводит к обращению к объекту, на который ссылается ссылка.

int a=5;

int & L=a; // Ссылка на a

L=10; printf(“%d”, a); // Печатается 10

Не существует указателей на ссылки, ссылок на ссылки, массивов ссылок.

5.3. Массивы

Дадим следующее определение массива

Массив – это производный тип, представляющий собой множество элементов, все элементы массива имеют один и тот же тип и следуют в памяти друг за другом.

Массивы бывают одномерными и многомерными.

5.3.1. Одномерные массивы

Формат определения одномерного массива:

<type> <имя_массива>[<конст_выражение>];

Примеры:

Int a[100]; // Объявление массива из 100 элементов типа int

char C1[20], C2[150]; // Объявляются 2 массива элементов типа char из 20 и 150 элементов

Описание массива может не содержать число элементов.

extern float y[]; // Описание

…….

float y[20]; // Определение

Обращение к элементам массива осуществляется с помощью специальной операции [] – обращение по индексу.

int m[10];

m[0]=1; // Элементу массива с индексом 0 присваивается значение 1

m[1]=2; // Элементу массива с индексом 1 присваивается значение 2

;

m[9]=10; // Элементу массива с индексом 9 присваивается значение 10

Индексация всегда начитается с 0, последний элемент имеет индекс n-1.

Элемент массива может участвовать в любом выражении, где допустимо использование переменной соответствующего типа.

m[5]=m[3]+m[4]*100;

Инициализация массива

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

int a1[4]={ 2, 5, 9, 10 }; // Массив из 4-х элементов

int a2[7]={ 3, 4, 5 }; // Массив из 7 элементов, проинициализированы первые 3

char c1[]={ ‘A’, ‘g’, ‘1’, ‘y’, ‘I’ }; // Массив из 5 элементов,

// размерность определяется по умолчанию

Если массив объявлен за пределами блоков, то по умолчанию его элементы инициализируются 0.

Массивы и указатели

Имя массива, используемое внутри выражения без [] является указателем на первый элемент массива (элемент с индексом 0). Данный указатель является константным, т.е. его значение нельзя изменять.

Для некоторого массива, например

int A[10];

выполняется равенство A==&A[0]

Доступ к элементу массива возможен или через индексное выражение или через операцию обращения по адресу.

for (int i=0; i<10; i++) A[i]=2*i;

for (int i=0; i<10; i++) *(A+i)=2*i; // Наличие скобок обязательно,

// так как приоритет операции * выше, чем операции +

Кроме того имя массива без скобок является указателем, тип которого соответствует указателю на тип элемента массива. Допустим следующий порядок работы с массивом:

int a[10];

int *p;

p=a;

for(int i=0; i<10; i++) p[i]=i*i;

или

for(int i=0; i<10; i++) *(p+i)=i*i;

Строки

Строка – это символьный массив, заканчивающийся символом с кодом 0 (символ NULL) – это служебный символ, являющийся признаком конца строки.

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

Примеры:

char str[]=“ABCD”; // Это строка, выделяется память под 5 символов (последний 0)

char c[]={‘A’, ‘B’, ‘C’, ‘D’ }; // Это просто массив из 4-х символов

char *s=“Пример строки”; // Допустимо такое определение строки

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

int len=0; // Длина строки

for(; s[len]; len++) ;

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