Як повернути масив


 

Масиви є однією з найпростіших форм структурованого зберігання даних. Оскільки під зберігання одновимірних масивів відводяться неподільні області пам’яті, і більшість мов програмування має синтаксичні конструкції для їх оголошення, вони інтенсивно використовуються як буферів для передачі великих обсягів інформації різним (в тому числі і бібліотечним) функцій. У свою чергу функцій іноді потрібно повернути масив.


Вам знадобиться

— текстовий редактор;
- Компілятор і линкер C або C + +.

Інструкція

  1. Поверніть дані з функції або методу, помістивши їх в масив фіксованої довжини, розподілений викликає стороною і переданий по посиланню. Проведіть визначення відповідного типу даних, наприклад:


    typedef int t_array10 [10];

    Використовуйте його в декларації та реалізації потрібної функції або методу:

    void ReturnArray (t_array10 & raOut)
    {
    raOut [0] = 10;
    }

    Відповідним чином здійснюйте виклик:


    int aNumbers [10];
    ReturnArray (aNumbers);

    Недолік даного методу полягає в тому, що довжина масиву фіксована.

  2. Поверніть дані масиву, помістивши їх у вихідний буфер, розподілений викликає стороною і переданий за вказівником. Прототип функції або методу може містити параметр, оголошений як в нотації масиву без специфікації розміру:


    void ReturnArray (int anArray [], int nSize);

    так і в якості покажчика:


    void ReturnArray (int * pnArray, int nSize);

    В обох випадках ідентифікатор параметра можна використовувати в нотації масиву:


    void ReturnArray (int * pnArray, int nSize)
    {
    for (nSize -; nSize> -1; pnArray [nSize] = nSize -);
    }

    / / Виклик
    int aNumbers [10];
    ReturnArray (aNumbers, sizeof (aNumbers) / sizeof (aNumbers [0]));

    Даний метод передачі масивів у функції і повернення даних масивів з них в переважній більшості випадків використовується при розробці програм на C. Зверніть увагу на те, що функції та методи, які беруть і повертають дані подібним чином, як правило, повинні мати додатковий параметр, через який передається реальний розмір буфера.

  3. Поверніть масив, створений у функції або методі. Формально в даному випадку повинен бути повернутий не масив, а покажчик на його перший елемент:


    int * ReturnArray ()
    {
    int * pnArray = new int [10];

    / / Робота з pnArray

    return pnArray;
    }

    / / Отримання покажчика на створений масив
    int * pnNumbers = ReturnArray ();
    / / Використання
    delete [] pnNumbers; / / видалення

    Використання даного методу пов’язане з деякими обмеженнями. Так, масив повинен бути розташований в динамічно розподіляє пам’яті. Крім того, його видалення необхідно здійснити методом, відповідним створенню (delete в разі використання new, free для malloc, і т.д.).

  4. Використовуйте класи контейнерів для того, щоб зручно повертати масиви при розробці програм на C + +. Приклад створення та повернення масиву, що є об’єктом класу шаблону vector стандартної бібліотеки шаблонів C + +, специфікованого для int, може виглядати так:


    # Include

    std :: vector ReturnArray ()
    {
    std :: vector oArray;

    oArray.resize (10);

    oArray [0] = 100;
    oArray [1] = 200;

    return oArray;
    }

    std :: vector oArray = ReturnArray ();

    Зверніть увагу на те, що більшість популярних фреймворків надає потужні класи або шаблони класів масивів. Найчастіше вони реалізують концепцію неявного розділення даних з підрахунком посилань і копіюванням при запису. Тому повернення за значенням подібних масивів з функцій виконується дуже ефективно і пов’язаний з мінімальною витратою обчислювальних ресурсів.