Пятница, 29.03.2024, 10:31
Discovery
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Форма входа
Категории раздела
PHP [1]
Уроки по PHP для начинающих
C++ [18]
Статьи посвященные С++
XML [2]
Статьи по XML
Математика программистам [0]
Нужна ли программистам математика? Да вроде и не нужна... Или все же нужна? И если да то в каком объеме? Давайте попробуем разобраться в этом вместе!
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
     Каталог статей
    -->
    Главная » Статьи » Программирование » C++

    Функции: передача функции массива и возврат из функции указателя.

    Функции: передача функции массива и возврат из функции указателя.

    В этом уроке я объясню, как передать функции массив, указатель, а также  как вернуть указатель из функции.

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

    #include <iostream>
    #include <windows.h>
    using namespace std;

    void show(int num[5]);

    int main()
    {
        int num[5] = {1, 2, 3, 4, 5};

        show(num);

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    void show(int num[5])
    {
        int i;

         cout << "Выводим массив num на экран: ";

        for(i=0; i<5; i++)
        {
            cout << num[i] << " ";
        }
    }

    Если вы читали урок про использование указателей, то вы знаете, что если указатель содержит адрес первого элемента массива, то его можно индексировать как  обычный массив. Нельзя также забывать что, передавая указатель на первый элемент массива, мы работаем с оригиналом массива, а не с его копией. И любые изменения элементов массива в функции, изменят и оригинал. Чтобы убедиться в этом, давайте немного изменим предыдущую программу:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    void show(int num[5]);

    int main()
    {
        int i;
        int num[5] = {1, 2, 3, 4, 5};

        cout << "Массив num до вызова функции show: ";

        for(i=0; i<5; i++)
        {
            cout << num[i] << " ";
        }
        cout << "\n\n";

        show(num);

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    void show(int num[5])
    {
        int i;

        cout << "Массив num после вызова функции show: ";

        for(i=0; i<5; i++)
        {
            (num[i])++;
            cout << num[i] << " ";
        }
    }

    Вот результат выполнения этой программы:

    Массив num до вызова функции show: 1 2 3 4 5

    Массив num после вызова функции show: 2 3 4 5 6

    Для продолжения нажмите любую клавишу . . .

    Точно также можно передавать многомерные массивы. Вот пример такой программы:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    void show(int num[2][5]);

    int main()
    {
        int num[2][5] =
        {
            {1, 2, 3, 4, 5},
            {6, 7, 8, 9, 0}
        };

        show(num);

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    void show(int num[2][5])
    {
        int i, j;

        cout << "Выводим массив num на экран: ";

        for(int i=0; i<2; i++)
        {
            for(int j=0; j<5; j++)
            {
                cout << num[i][j] << " ";
            }
        }
    }

    Если нужно передать в функцию строку, то ее можно предать в виде массива типа char. Вот пример программы, в которой в функцию передается строка:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    void show(char str[14]);

    int main()
    {
        char str[14];
        strcpy(str, "Hello, World!");

        show(str);

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    void show(char str[14])
    {
        while(*str)
        {
            cout << *str;
            str++;
        }
    }

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

    Функция может возвращать не только переменную, но и указатель. В следующей программе помощи указателя мы сдвигаем его на девятую букву во фразе «Hello, World!» и возвращаем его с помощью функции return, и выводим его на экран.

    #include <iostream>
    #include <windows.h>
    using namespace std;

    char *ShowSymbol(char str[14]);

    int main()
    {
        char str[14];
        char *symbol = 0;
     
          symbol = ShowSymbol("Hello, World!");

           cout << *symbol;

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    char *ShowSymbol(char str[14])
    {
        str = str + 9;
        return str;
    }

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

    Категория: C++ | Добавил: stranger140569 (27.06.2013)
    Просмотров: 7688 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright MyCorp © 2024
    Конструктор сайтов - uCoz