С++ для начинающих



     Корпорация, что касается авто запчасти на terex. | Сайлид-зао посмотреть. |     

Параметры-массивы


Массив в С++ никогда не передается по значению, а только как указатель на его первый, точнее нулевой, элемент. Например, объявление

void putValues( int[ 10 ] );

рассматривается компилятором так, как будто оно имеет вид

void putValues( int* );

Размер массива неважен при объявлении параметра. Все три приведенные записи эквивалентны:

// три эквивалентных объявления putValues()

void putValues( int* );

void putValues( int[] );

void putValues( int[ 10 ] );

Передача массивов как указателей имеет следующие особенности:

  • изменение значения аргумента внутри функции затрагивает сам переданный объект, а не его локальную копию. Если такое поведение нежелательно, программист должен позаботиться о сохранении исходного значения. Можно также при объявлении функции указать, что она не должна изменять значение параметра, объявив этот параметр константой:
  • void putValues( const int[ 10 ] );

    • размер массива не является частью типа параметра. Поэтому функция не знает реального размера передаваемого массива. Компилятор тоже не может это проверить. Рассмотрим пример:
    • void putValues( int[ 10 ] ); // рассматривается как int*

      int main() {

          int i, j [ 2 ];

          putValues( &i ); // правильно: &i is int*;

                           // однако при выполнении возможна ошибка

          putValues( j ); // правильно: j - адрес 0-го элемента - int*;

                          // однако при выполнении возможна ошибка

      При проверке типов параметров компилятор способен распознать, что в обоих случаях тип аргумента int* соответствует объявлению функции. Однако контроль за тем, не является ли аргумент массивом, не производится.

      По принятому соглашению C-строка является массивом символов, последний элемент которого равен нулю. Во всех остальных случаях при передаче массива в качестве параметра необходимо указывать его размер. Это относится и к массивам символов, внутри которых встречается 0. Обычно для такого указания используют дополнительный параметр функции. Например:

      void putValues( int[], int size );




      Содержание  Назад  Вперед