@Sazoks

Указатели и многомерные массивы (С++)?

Всем привет! В ходе изучения С++ наткнулся на интересный сайт, https://metanit.com
Там есть тема указатели и массивы. С одномерными все предельно ясно, но двумерные мне как-то плохо даются. Может кто "на пальцах" объяснить что происходит здесь:
#include <iostream>
 
int main()
{
    int a[3][4] = { {1, 2, 3, 4} , {5, 6, 7, 8}, {9, 10, 11, 12}};
    int n = sizeof(a)/sizeof(a[0]);      
    int m = sizeof(a[0])/sizeof(a[0][0]);  
      
    int *end = a[0] + n * m - 1; 
    for(int *ptr=a[0], i=1; ptr <= end; ptr++, i++)
    {
        std::cout << *ptr << "\t";
        if(i%m == 0)
        {
            std::cout << std::endl;
        }
    }
     
    return 0;

Заранее всем спасибо.
  • Вопрос задан
  • 294 просмотра
Пригласить эксперта
Ответы на вопрос 1
RabraBabr
@RabraBabr
#include <iostream>
 
int main()
{
// создается двухмерный массив 3 на 4 и тут же заполняется числами
    int a[3][4] = { {1, 2, 3, 4} , {5, 6, 7, 8}, {9, 10, 11, 12}};

//  вычисляем количество строк  матрицы 3
    int n = sizeof(a)/sizeof(a[0]);      

// вычисляем количество столбцов матрицы 4
    int m = sizeof(a[0])/sizeof(a[0][0]);  
      
// устанавливаем в указатель *end адрес ячейки памяти последнего элемента массива
    int *end = a[0] + n * m - 1; 

//  устанавливаем в указатель *ptr адрес ячейки памяти первого элемента массива (имеющего нулевой индекс)
// после этого последовательно перебираем все элементы массива и выводим их на экран. 
// Что бы массив выводился на экран в виде матрицы завели переменную i для подсчета количества итераций
    for(int *ptr=a[0], i=1; ptr <= end; ptr++, i++)
    {
        std::cout << *ptr << "\t";

// как только кол-во итераций стало кратно кол-ву столбцов то есть выведена целая строка переводим каретку на новую строку
        if(i%m == 0) 
        {
            std::cout << std::endl;
        }
    }
     
    return 0;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы