Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. Ввод/вывод двумерных массивов осуществляется в двух вложенных циклах
  2. Заполнение массивов
  3. Инициализация данных
  4. Пример использования массивов строк
  5. Философия науки – вкл. эпистемологию, науковедение, социология науки, наукометрия (измерение научных знаний инфомассивов).

В C++ предусмотрена возможность инициализации массивов. Формат инициализации массивов подобен формату инициализации других переменных.

тип имя_массива [размер] = { список_значений};

Здесь элемент список_значений представляет собой список значений инициализации элементов массива, разделенных запятыми. Тип каждого значения инициализации должен быть совместим с базовым типом массива (элементом тип). Первое значение инициализации будет сохранено в первой позиции массива, второе значение — во второй и т.д. Обратите внимание на то, что точка с запятой ставится после закрывающей фигурной скобки (}).

Например, в следующем примере 10-элементный целочисленный массив инициализируется числами от 1 до 10.

int i [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

После выполнения этой инструкции элемент i [0 ] получит значение 1, а элемент i [9] — значение 10.

// tema6_2-1.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int sqrs[5][2]={1,2,3,4,5,6,7,8,9,10};

int main()

{

int j;

for(j=0; j<10; j++)

{

cout << sqrs[j];

}

_getch();

return 0;

}

Для символьных массивов, предназначенных для хранения строк» предусмотрен сокращенный вариант инициализации, который имеет такую форму,

char имя_массива [размер] = "строка”;

Например, следующий фрагмент кода инициализирует массив str фразой “привет”: char str[7] = "привет";

Это равнозначно поэлементной инициализации.

Поскольку в C++ строки должны завершаться нулевым символом, убедитесь, что при объявлении массива его размер указан с учетом признака конца. Именно поэтому в предыдущем примере массив str объявлен как 7-элементный, несмотря на то, что в слове "привет" только шесть букв. При использовании строкового литерала компилятор добавляет нулевой признак конца строки автоматически.

Многомерные массивы инициализируются по аналогии с одномерными.

Например, в следующем фрагменте программы массив sqrs инициализируется числами от I до 10

// tema6_2-2.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int sqrs[5][2]={1,2,3,4,5,6,7,8,9,10};

int main()

{

int i,j;

for(j=0; j<5; j++)

for(i=0; i<2; i++)

{

cout << " sqrs["<<j<<"]["<<i<<"]= "<< sqrs[j][i];

}


_getch();

return 0;

}

Для записи масива в два столбика, добавим разделитель по строкам.

// tema6_2-3.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int sqrs[5][2]={1,2,3,4,5,6,7,8,9,10};

int main()

{

int i,j;

for(j=0; j<5; j++)

{

for(i=0; i<2; i++)

{

cout << " sqrs["<<j<<"]["<<i<<"]= "<< sqrs[j][i];

}

cout <<endl;

}

_getch();

return 0;

}

Результат:


Например, в следующем фрагменте программы массив sqrs инициализируется числами от I до 10 и квадратами этих чисел.

// tema6_2-4.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int sqrs[10][2]={

1,1,

2,4,

3,9,

4,16,

5,25,

6,36,

7,49,

8,64,

9,81,

10,100

};

 

int main()

{

int i,j;

for(j=0; j<10; j++)

{

for(i=0; i<2; i++)

{

cout << "sqrs["<<j<<"]["<<i<<"]= "<< sqrs[j][i];

}

cout <<endl;

}

_getch();

return 0;

}


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

int sqrs[10][2] = {

{1, 1},

{2, 4},

{3, 9Ь

{4, 16},

{5, 25},

{6, 36},

{7, 49|,

{8, 64},

{9, 81},

{10, 100}

};

 

Рис..2. Схематическое представление инициализированного массива sqrs

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

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

// tema6_2-1.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int sqrs[10][2]={

{1,1},

{2,4},

{3,9},

{4,16},

{5,25},

{6,36},

{7,49},

{8,64},

{9,81},

{10,100}

};

 

int main()

{

int i,j;

cout << "Enter a number from 1 to 10: ";

cin >> i;

//Поиск значения i.

for(j=0; j<10; j++)

{

 
 

if(sqrs[j][0]==i) break;

}

cout << "Square of number " << i << " = ";

cout << sqrs[i][1];

_getch();

return 0;

}

 

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

#include <iostream>

#include <cstring>

using namespace std;

void fl();

int main()

{

f1();

f1();

return 0;

}

-------------------------------------------

void fl() f

char s[80]=” Эto просто тест\n”;

cout << s;

strcpy{s, ”И3MEHEHO\n”); // Изменяем значение строки s.

cout << s;

}

При выполнении этой программы получаем такие результаты.

Это просто тест

ИЗМЕНЕНО

Это просто тест

ИЗМЕНЕНО

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

Это просто тест


Дата добавления: 2015-07-24; просмотров: 117 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Двумерные массивы| Массивы строк

mybiblioteka.su - 2015-2024 год. (0.024 сек.)