Веб программирование

Массивы [C++]

 
 

Приветствую! Сейчас расскажу о массивах.

Массивы в языке C++ являются очень мощным инструментом. С их помощью можно, например, скомпоновать однотипные данные.

Синтаксис объявления массивов таков:

<type> <name>[<elementCount>];

А самым простым примером будет такое вот объявление:

int someArray[10];

Эта конструкция объявит массив someArray с 10 элементами. Обращение к элементу массива производится путем указания его имени, и в квадратных скобках индекса элемента. В конструкции выше число, стоящее в квадратных скобках обозначает максимальный индекс элементов массива и называется верхней границей массива.

Если есть верхняя граница, то должна быть и нижняя, так? Правильно. Нижней границей массива в данном случае будет ноль. Помните: отсчет всегда начинается с нуля.

От массива someArray, что был обьявлен выше толку никакого. Его надо заполнить. Заполнить можно вручную:

someArray[0] = 0;
someArray[1] = 1;
someArray[2] = 2;
someArray[3] = 3;
someArray[4] = 4;
someArray[5] = 5;
someArray[6] = 6;
someArray[7] = 7;
someArray[8] = 8;
someArray[9] = 9;
someArray[10] = 10;

Данный код заполнит массив someArray числами от одного до десяти включительно. Однако теперь представим себе ситуацию, когда в массиве кол-во элементов не 10, а, допустим n. n может быть равной любому числу, и если это число большое, не будете же вы заполнять массив таким способом? Нет, не будете. На помощь нам приходит цикл for, который сделает всю работу за нас.

Заодно поучимся выводить значение элементов массива на экран, кстати говоря здесь я не буду использовать красивое название "someArray", возьмем просто "a":

#include <iostream>

using namespace std;

int main()
{
   int a[10];

   for(int i = 0; i < sizeof(a); ++i)
      a[i] = i * i;

   for(int i = 0; i < sizeof(a); ++i)
      cout << a[i] << endl;
}

Компилируем:

g++ arr.cpp -o arr

Запускаем:

./arr

И готовимся к сюрпризу. Лично мне он выдал такое:

0
1
4
9
16
25
36
49
64
81
101
11
134514400
0
0
-1220209453
1
-1081328812
-1081328804
-1217533856
0
-1081328868
-1081328804
0
134513308
-1218584588
0
0
0
892367785
-1486039112
0
0
0
1
134513984
0
-1217444192
-1220209687
-1217392652

Вопрос: в чем проблема? Проблема в том, что sizeof возвращает кол-во элементов массива в байтах, а нам надо вернуть оное в эдаких "штуках". То есть вернуться должно кол-во ячеек массива. Решение проблемы:

int main()
{
   int a[10];

   for(int i = 0; i < sizeof(a) / sizeof(int); ++i)
      a[i] = i * i;

   for(int i = 0; i < sizeof(a) / sizeof(int); ++i)
      cout << a[i] << endl;
}

Пробуем:

0
1
4
9
16
25
36
49
64
81

Все правильно, однако. Также массивы могут быть и пользовательских типов, например:

#include <iostream>

using namespace std;

class UserType
{
public:
   int a;
   int b;
};

int main()
{
   UserType a[10];

   for(int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
      a[i].a = i * i;
      a[i].b = i;
   }

   for(int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
      cout << a[i].a << endl;
      cout << a[i].b << endl;
   }
}

Выведет нам:

0
0
1
1
4
2
9
3
16
4
25
5
36
6
49
7
64
8
81
9

Пугает? Не бойтесь, вполне правильный результат. Значения написаны через одну, то есть сначала идет a[i].a, потом за ней a[i].b, потом следующая a[i].a, потом a[i].b, итд. Ну а на этом все, надеюсь мои статьи вам нравятся, удачи.


Есть вопросы? Спроси на нашем форуме!!
EverybodyLies [17.11.2012 14:39]

новичкам будет полезно.

kaiser1234 [30.11.2014 12:30]

У тебя массив обявлен из 10 элементов, а присваеваешь ты уже 11 элементов. Посчитай



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.