int MyNumbers [5] = {34, 56, -21, 5002, 365};
8
|
:
|
cout
|
«
|
"First
|
element at index 0: " «
|
MyNumbers
|
[0]
|
«
|
endl;
|
9:
|
cout
|
«
|
"Second element at index 1: " «
|
MyNumbers
|
[1]
|
«
|
endl;
|
1 0
|
:
|
cout
|
«
|
"Third element
|
at
|
index 2: " «
|
MyNumbers
|
[2]
|
«
|
endl;
|
1 1
|
:
|
cout
|
«
|
"Fourth element at index 3: " «
|
MyNumbers
|
[3]
|
«
|
endl;
|
1 2
|
:
|
cout
|
«
|
"Fifth
|
element
|
at
|
index 4: " «
|
MyNumbers
|
[4]
|
«
|
endl;
|
13:
return 0;
}
76 ЗАНЯТИЕ 4. Массивы и строки
Результат
First element at index 0: 34
Second element at index 1: 56
Third element at index 2: -21
Fourth element at index 3: 5002
Fifth element at index 4: 365
Анализ
строке 6 объявляется массив из пяти целых чисел с исходными значениями, опре деленными для каждого из них. Последующие строки просто отображают целые числа, используя оператор c o u t и переменную типа массива MyNumbers с соответствующим ин дексом.
ПРИМЕЧАНИЕ Чтобы вы лучше ознакомились с концепцией отсчитываемых от нуля индексов,
используемых для доступа к элементам массива, с листинга 4.1 строки кода
нумеруются начиная с нуля, а не с единицы.
Изменение хранимых в массиве данных
коде предыдущего листинга пользовательские данные не вводились в массив. Син таксис присвоения целого числа элементу в этом массиве очень похож на присвоение зна чения целочисленной переменной.
Например, присвоение значения 2011 целочисленной переменной выглядит так:
int AnlntegerValue;
AnlntegerValue = 2011;
Присвоение значения 2011 четвертому элементу в рассматриваемом массиве выглядит так:
MyNumbers [3] = 2011; // Присвоение 2011 четвертому элементу
Листинг 4.2 демонстрирует использование констант в объявлении длины массива, а так же присвоение значений отдельным элементам массива во время выполнения программы.
ЛИСТИНГ 4.2. Присвоение значений элементам массива____________________________________
#include
using namespace std;
2 :
int main()
{
const int ARRAY_LENGTH = 5;
6 :
// Массив из 5 целых чисел, инициализированных нулями
int MyNumbers [ARRAY_LENGTH] = {0};
9:
cout « "Enter index of the element to be changed: ";
int nElementlndex = 0;
cin » nElementlndex;
13:
14:. cout « "Enter new value: ";
15: cin » MyNumbers [nElementlndex];
16:
cout « "First element at index 0: " « MyNumbers [0] « endl;
cout « "Second element at index 1: " « MyNumbers [1] « endl;
cout « "Third element at index 2: " « MyNumbers [2] << endl;
cout « "Fourth element at index 3: " « MyNumbers [3] « endl;
21: cout « "Fifth element at index 4: " « MyNumbers [4] « endl;
2 2 :
return 0;
}
Результат
Enter index of the element to be changed: 2
Enter new value: 2011
First element at index 0: 0
Second element at index 1: 0
Third element at index 2: 2011
Fourth element at index 3: 0
Fifth element at index 4: 0
Анализ
Синтаксис объявления массива в строке 8 использует константу c o n s t i n t e g e r ARRAY LENGTH, инициализированную предварительно значением пять. Поскольку это статический массив, его длина фиксируется во время компиляции. Компилятор заменяет константу ARRAY LENGTH значением 5 и компилирует код, полагая, что М уАггау — это
целочисленный массив, содержащий пять элементов. В строках 10-12 пользователя спра шивают, какой элемент массива он хочет изменить, а введенный индекс сохраняется в целочисленной переменной E le m e n tln d e x . Это значение используется в строке 14 для изменения содержимого массива. Вывод демонстрирует, что изменился элемент по индек су 2, а фактически это был третий элемент массива, поскольку индексы отсчитываются от нуля. Вы должны привыкнуть к этому.
ПРИМЕЧАНИЕ
Многие новички в программировании на языке C++ присваивают значение пятому элементу массива из пяти целых чисел по индексу пять. Обратите вни мание: это уже за пределами массива, и откомпилированный код попытается обратиться к шестому элементу массива, состоящему из пяти элементов.
Этот вид ошибки вызывается ошибкой поста охранения (fence-post error). Дан ное название происходит из того факта, что количество постов для построения охранения всегда на один больше, чем количество охраняемых участков.
ВНИМАНИЕ!
В листинге 4.2 отсутствует нечто фундаментальное: проверка введенного пользователем индекса на соответствие границам массива. Фактически пред ыдущая программа должна проверять, находится ли значение переменной nElementindex в пределах от 0 до 4, и отбрасывать все остальные значения. Отсутствие этой проверки позволяет пользователю присвоить значение вне границ массива. Потенциально это может привести к нарушению работы при ложения, а в самом плохом случае и операционной системы.
Более подробная информация о проверках приведена на занятии 6, "Ветвление процесса выполнения программ”.
ЗАНЯТИЕ 4. Массивы и строки
Do'stlaringiz bilan baham: |