Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++ 2.0.docx
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
77.41 Кб
Скачать

5) Операции с указателями

С указателями можно выполнять следующие операции: разадресация (*), присваивание, сложение с константой, вычитание, инкремент (++), декремент (- -), сравнение, приведение типов. При работе с указателями часто используется операция получения адреса (&). Операция разадресации, или разыменования, предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа):

char a; // переменная типа char

char * p = new char;/* выделение памяти под указатель */

/* и под динамическую переменную типа char */

// присваивание значения обеим переменным

*p = 'Ю'; a = *p;

На одну и ту же область памяти может ссылаться несколько указателей различного типа. Примененная к ним операция разадресации даст разные результаты.:

void *pointer = static_cast<void *>( &a );

pointer = reinterpret_cast<void *>( pa );

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

Инкремент перемещает указатель к следующему элементу массива, декремент - к предыдущему. Фактически значение указателя изменяется на величину sizeof(тип). Разность двух указателей - это разность их значений, деленная на размер типа в байтах. Суммирование двух указателей не допускается. При записи выражений с указателями следует обращать внимание на приоритеты операций . В качестве примера рассмотрим последовательность действий, заданную в операторе *p++ = 10; То же самое можно записать подробнее: *p = 10; p++; Выражение (*p)++, напротив, инкрементирует значение, на которое ссылается указатель. Ссылку можно рассматривать как указатель, который всегда разыменовывается. Формат объявления ссылки:

тип & имя; где тип - это тип величины, на которую указывает ссылка, & - оператор ссылки, означающий, что следующее за ним имя является именем переменной ссылочного типа, например:

int kol;

int& pal = kol; //ссылка pal - альтернативное имя для kol

const char& CR = '\n'; //ссылка на константу

6) Описание объектов (экземпляров класса) Способы обращения к полям объекта. (С++).

7) Массивы. Описание одномерных и многомерных массивов, инициализация.

Массив представляет собой структуру данных, которая позволяет одной переменной хранить несколько значений. При объявлении массива вы должны указать тип значений, хранящихся в массиве, а также количество значений (называемыхэлементами массива). Все элементы внутри массива должны быть одного и того же типа, например, int, float или char. Для сохранения значения внутри массива вам следует указать номер элемента массива, в котором вы хотите сохранить свое значение. Чтобы обратиться к значению, хранящемуся внутри массива, ваши программы указывают имя массива и номер элемента.

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

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ МАССИВА

Массив представляет собой переменную, способную хранить одно или несколько значений. Подобно переменным, используемым вашими программами до сих пор, массив должен иметь тип (например, int, char или float) и уникальное имя. В дополнение к этому вам следует указать количество значений, которые массив будет хранить. Все сохраняемые в массиве значения должны быть одного и того же типа. Другими словами, ваша программа не может поместить значения типа float, char и long водин и тот же массив. Следующее объявление создает массив с именем

test_scores, который может вмещать 100 целых значений для тестовых очков:

int test_scores [100] ;

Когда компилятор C++ встречает объявление этой переменной, он распределит достаточно памяти для хранения 100 значений типа int. Значения, хранящиеся в массиве, называются элементами массива.

Обращение к элементам массива

Как вы уже знаете, массив позволяет вашим программам хранить несколько значений в одной и той же переменной. Для обращения к определенным значениям, хранящимся в массиве, используйте значение индекса, которое указывает на требуемый элемент. Например, для обращения к первому элементу массива test_scores вы должны использовать значение индекса 0. Для обращения ко второму элементу используйте индекс 1. Подобно этому, для обращения к третьему элементу используйте индекс 2. Как показано на рис. 16.1, первый элемент массива всегда имеет индекс 0, а значение индекса последнего элемента на единицу меньше размера массива:

Как C++ индексирует элементы массива.

Важно помнить, что C++ всегда использует 0 для индекса первого элемента массива, а индекс последнего элемента на единицу меньше размера массива. Следующая программа ARRAY. CPP создает массив с именем values, который вмещает пять целочисленных значений. Далее программа присваивает элементам значения 100, 200, 300, 400 и 500:

#include <iostream.h>

void main(void)

{

int values[5]; // Объявление массива

values[0] = 100;

values[1] = 200;

values[2] = 300;

values[3] = 400;

values [4] = 500;

cout << "Массив содержит следующие значения" << endl;

cout << values [0] << ' ' << values [1] << ' ' << values [2] << ' ' << values [3] << ' ' << values [4] << endl;

}

ИНИЦИАЛИЗАЦИЯ МАССИВА ПРИ ОБЪЯВЛЕНИИ

Как вы уже знаете, C++ позволяет вашим программам инициализировать переменные при объявлении. То же верно и для массивов. При объявлении массива вы можете указать первоначальные значения, поместив их между левой и правой фигурными скобками, следующими за знаком равенства. Например, следующий оператор инициализирует массив values:

int values[5] = { 100, 200, 300, 400, 500 };

Подобным образом следующее объявление инициализирует массив с плавающей точкой:

float salaries[3] = { 25000.00. 35000.00, 50000.00 };

Если вы не указываете первоначальное значение для какого-либо элемента массива, большинство компиляторов C++ будут инициализировать такой элемент нулем. Например, следующее объявление инициализирует первые три из пяти элементов массива:

int values[5] = { 100, 200, 300 };

Программа не инициализирует элементы values[3] и values[4]. В зависимости от вашего компилятора, эти элементы могут содержать значение 0. Если вы не указываете размер массива, который вы инициализируете при объявлении, C++ распределит достаточно памяти, чтобы вместить все определяемые элементы. Например, следующее объявление создает массив, способяый хранить четыре целочисленных значения:

int numbers[] = { 1, 2, 3, 4 };

ПЕРЕДАЧА МАССИВОВ В ФУНКЦИИ

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

void some_function(int array[], int number_of_elements);

Следующая программа ARRAYFUN.CPP передает массивы в функциюshow_array, которая использует цикл for для вывода значений массивов:

#include <iostream.h>

void show_array (int array [] , int number_of_elements)

{

int i;

for (i = 0; i < number_of_elements; i++) cout << array[i] << ' ';

cout << endl;

}

void main(void)

{

int little_numbers[5] ={1,2,3,4,5};

int big_numbers[3] = { 1000, 2000, 3000 };

show_array(little_numbers, 5);

show_array(big_numbers, 3);

}

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Массив представляет собой переменную, которая может хранить одно или несколько значений одного и того же типа. Для объявления массива вам следует указать тип, имя массива, а также количество значений, хранящихся в массиве. Значения внутри массива называются элементами массива. Первый элемент массива хранится как элемент 0(array[OJ), индекс последнего элемента массива на единицу меньше размера массива. Программы часто используют индексные переменные для обращения к элементам массива. Если функция воспринимает массив как параметр, она должна указать тип и имя, но не размер массива. Если программа передает массив в функцию, она, как правило, передает и параметр, который сообщает функции количество элементов содержащихся в массиве. Так как C++ передает массив в функцию с помощью адреса массива функция может изменять значения, содержащиеся в массиве.

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