Читайте также: |
|
В 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++)
{
}
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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Двумерные массивы | | | Массивы строк |