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



         

Параметры-массивы - часть 2


int main() {

    int i, j[ 2 ];

    putValues( &i, 1 );

    putValues( j, 2 );

    return 0;

}

putValues() печатает элементы массива в следующем формате:

 ( 10 )< 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 >

где 10 – это размер массива. Вот как выглядит реализация putValues(), в которой используется дополнительный параметр:

#include <iostream>

const lineLength =12; // количество элементов в строке

void putValues( int *ia, int sz )

{

    cout << "( " << sz << " )< ";

    for (int i=0;i<sz; ++i )

    {

        if ( i % lineLength == 0 && i )

            cout << "\n\t"; // строка заполнена

        cout << ia[ i ];

        // разделитель, печатаемый после каждого элемента,

        // кроме последнего

        if ( i % lineLength != lineLength-1 &&

                 i != sz-1 )

            cout << ", ";

    }

    cout << " >\n";

}

Другой способ сообщить функции размер массива-параметра – объявить параметр как ссылку. В этом случае размер становится частью типа, и компилятор может проверить аргумент в полной мере.

// параметр - ссылка на массив из 10 целых

void putValues( int (&arr)[10] );

int main() {

    int i, j [ 2 ];

    putValues(i); // ошибка:

                  // аргумент не является массивом из 10 целых

    putValues(j); // ошибка:

                  // аргумент не является массивом из 10 целых

    return 0;

}

Поскольку размер массива теперь является частью типа параметра, новая версия putValues() способна работать только с массивами из 10 элементов. Конечно, это ограничивает ее область применения, зато реализация значительно проще:

#include <iostream>

void putValues( int (&ia)[10] )

{

    cout << "( 10 )< ";

    for ( int 1 =0; i < 10; ++i ) { cout << ia[ i ];

    // разделитель, печатаемый после каждого элемента,

    // кроме последнего




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