Указатели и массивы

Последнее обновление: 25.02.2023
Упражнение 1

Напишите программу, которая определяет и инициализирует массив первыми 20 нечетными числами. Выведите числа из массива на консоль по пять в строку. Для вывода используйте нотацию указателей (имя массива в качестве указателя). Подобным образом с помощью указателя выведите элементы массива в обратном порядке.

Решение
#include <iostream>

int main()
{
    const unsigned n {20};
    unsigned odds[n];
    // инициализируем массив первыми 20 нечетными числами
    for (unsigned i{}; i < n; i++)
    {
        odds[i] = i * 2 + 1;
    }
    const unsigned perline {5};    // количество чисел на строке
    // вывод чисел на консоль
    for (unsigned i{}; i < n; i++)
    {
        std::cout << *(odds + i) << "\t";
        // если i кратно 5, то продолжаем вывод на следующей строке
        if ((i + 1) % perline==0)
        {
            std::cout << std::endl;
        }
    }

    // вывод в обратном порядке
    std::cout << "\nReverse order:\n";
    for (int i {n - 1}; i >= 0; --i)
    {
        std::cout << *(odds + i) << "\t";
        if (i % perline == 0)
        {
            std::cout << std::endl;
        }
    }
}

Консольный вывод:

1       3       5       7       9
11      13      15      17      19
21      23      25      27      29
31      33      35      37      39

Reverse order:
39      37      35      33      31
29      27      25      23      21
19      17      15      13      11
9       7       5       3       1
Упражнение 2

Напишите программу, которая определяет и инициализирует массив первыми 20 нечетными числами. Выведите числа из массива на консоль по пять в строку. Для вывода определите указатель, который указывает на массив. С помощью инкремента (++) указателя выведите элементы в прямом порядке. А с потом в отдельном цикле с помощью декремента указателя выведите элементы массива в обратном порядке.

Решение
#include <iostream>

int main()
{
    const unsigned n {20};
    unsigned odds[n];
    // инициализируем массив первыми 20 нечетными числами
    for (unsigned i{}; i < n; i++)
    {
        odds[i] = i * 2 + 1;
    }
    const unsigned perline {5};    // количество чисел на строке
    unsigned* ptr{ odds };
    // вывод чисел на консоль
    for (unsigned i{}; i < n; i++)
    {
        std::cout << *ptr++ << "\t";
        // если i кратно 5, то продолжаем вывод на следующей строке
        if ((i + 1) % perline==0)
        {
            std::cout << std::endl;
        }
    }

    // вывод в обратном порядке
    std::cout << "\nReverse order:\n";
    for (unsigned i{}; i < n; i++)
    {
        std::cout << *--ptr << "\t";
        if ((i + 1) % perline==0)
        {
            std::cout << std::endl;
        }
    }
}

Консольный вывод:

1       3       5       7       9
11      13      15      17      19
21      23      25      27      29
31      33      35      37      39

Reverse order:
39      37      35      33      31
29      27      25      23      21
19      17      15      13      11
9       7       5       3       1
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850