Си++: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 204:
Массивы - это та часть языка Си, которая не подверглась изменениям при эволюционировании языка в C++. Поэтому их объявление и работа с ними на обоих этих языках совпадает. Чтобы создать в памяти новый массив, используется такая запись:
<font color="blue">int</font> m[<font color="green">10</font>];
<tt>int</tt> - это тип элементов массива, одинаковый для всех них. Конечно, Вы можете использовать любой другой тип (кроме <tt>void</tt>), чтобы задавать массивы. Квадратные скобки обозначают, что это массив, целое число в скобках (обязательно константа, известная на момент компиляции) - его размер, т.е. количество элементов. <i>M<i> - это имя нашей переменной-массива. Важно заметить, что в C/C++ типы <i>"массив"</i> и <i>"указатель"</i> полностью идентичны, поэтому в функцию, которая требует указатель, вполне законно передавать массив:
<font color="blue">void</font> MyFunc( <font color="blue">int</font> *arr );
MyFunc(m);
С другой стороны, среди формальных параметров функции можно объявить и обычный массив, и даже массив без указания размера. Компилятору это все равно, он в любом случае создаст функцию, принимающую указатель на начало массива. И уж точно массив не будет копироваться в параметры функции, если Вы напишете что-нибудь вроде: <tt>int arr[45]</tt>
<font color="blue">void</font> MyFunc( <font color="blue">int</font> *arr ); <font color="gray">// компилятор посчитает</font>
<font color="blue">void</font> MyFunc( <font color="blue">int</font> arr[] ); <font color="gray">// эти три объявления</font>
<font color="blue">void</font> MyFunc( <font color="blue">int</font> arr[<font color="green">15</font>] ); <font color="gray">// абсолютно идентичными</font>
Итак, ещё раз: в языках Си и C++ типы <i>"указатель"</i> и <i>"массив"</i> эквивалентны. Разница лишь в том, что при создании массива происходит автоматическое выделение памяти, в то время как вместе с указателем никакой дополнительной памяти не выделяется.
 
==== Инициализация ====