Инициализация одномерных массивов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Инициализация одномерных массивов



Термином " инициализация " обозначают возможность задать начальные значения элементов массива без программирования соответствующих действий. Например, не прибегая к программным средствам типа присваивания значений в цикле или считывания данных из внешнего источника (файл, клавиатура, блок данных).

В С++ одновременно с объявлением массива можно задать начальные значения всех элементов массива или только нескольких первых его компонент.

Например:

float t[5]={1.0, 4.3, 8.1, 3.0, 6.74};char b[7]={'П','р','и','в','е','т'};/*в данных примерах длину массива компилятор вычисляет по количеству начальных значений, перечисленных в фигурных скобках*/int d[10]={1, 2, 3};char a[10]="Привет";/*в данных примерах определяется значение только заданных переменных d[0],d[1],d[2] и a[0],a[1],...,d[9], остальные элементы не инициализируются*/

Если в определении массива явно указан его размер, то количество начальных значений не может быть больше количества элементов в массиве.

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

char e1[12] = "read error\n";char e2[13] = "write error\n";char e3[18] = "cannot open file\n";

Компилятор С++ сам сформирует нужное значение по количеству инициализирующих данных. В нашем случае под массив e2 будет отведено 13 байтов, включая последний байт с нулевым кодом, завершающий каждую строку. Оператор

printf("%s имеет длину, равную %d\n",e2,sizeof (e2));

выведет на экран

write errorимеет длину, равную 13

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

Адресация элементов массива осуществляется с помощью индексированного имени. Синтаксис обращения к элементу массива:

ИмяМассива[ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса];

Обращаться к элементам массива можно также посредством механизма указателей.

Таким образом, чтобы обратиться к элементу массива, надо указать имя массива и номер элемента в массиве (индекс).

Например:

a[0] – индекс задается как константа,

d[55] – индекс задается как константа,

s[i] – индекс задается как переменная,

w[4*p] – индекс задается как выражение.

Следует помнить, что компилятор в процессе генерации кода задет начальный адрес массива, который в дальнейшем не может быть переопределен. Начальный адрес массива – это адрес первого элемента массива. Вообще в программе начальным адресом массива считается ИмяМассива либо &ИмяМассива[0]. Имя массива считается константой-указателем, ссылающимся на адрес начала массива.

Определение размера памяти для одномерных массивов

Массив занимает непрерывную область памяти. Для одномерного массива полный объем занимаемой памяти в байтах вычисляется по формуле:

Байты = sizeof (тип) * размер массива

Массив представляет собой набор однотипных данных, расположенных в памяти таким образом, чтобы по индексам элементов можно было легко вычислить адрес соответствующего значения. Например, пусть одномерный массив A состоит из элементов, расположенных в памяти подряд по возрастанию индексов, и каждый элемент занимает по k байт. Тогда адрес i -того элемента вычисляется по формуле:

адрес(A[i]) = адрес(A[0]) + i*k

Пример 1. Определение размера памяти одномерного массива.

#include "stdafx.h"#include <iostream>using namespace std;#define v 4#define p 3 int _tmain(int argc, _TCHAR* argv[]){ const int q=4, r=1; int i_mas[10];   int k=sizeof(i_mas); cout << "i_mas[10] занимает " << k << " байт\n";   float f_mas[7]={2.0,4.5,8.3,7.0,1.0}; int t=sizeof(f_mas); cout << "f_mas[7]={2.0,4.5,8.3,7.0,1.0} занимает "<< t <<"байт\n"; double d_mas[2*q-r]; int w=sizeof(d_mas); cout << "d_mas[2*q-r] занимает " << w << " байт\n"; double d1_mas[2*v/p]; int w1=sizeof(d1_mas); cout << "d1_mas[2*v/p] занимает " << w1 << " байт\n"; char c_mas[]="Программирование"; int s=sizeof(c_mas); cout << "c_mas[]=\"Программирование\"занимает"<< s <<"байт\n"; system("pause"); return 0;}

Результат выполнения программы:

i_mas[10] занимает 40 байт – 4 байта (тип int) * 10 (количество элементов массива)

f_mas[7] = {2.0,4.5,8.3,7.0,1.0} занимает 28 байт – 4 байта (тип float) * 7 (объявленное количество элементов массива)

d_mas[2*q-r] занимает 56 байт – 8 байт (тип double) * 7 (вычисленное через формулу количество элементов массива)

d1_mas[2*v/p] занимает 16 байт – 8 байт (тип double) * 2 (вычисленное через формулу количество элементов массива)

c_mas[]="Программирование" занимает 17 байт – 1 байт (тип char) * 17 (16 знаков + нулевой байт '\0')



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 36; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.175.182 (0.006 с.)