S
S
Sazoks2019-02-26 19:41:03
C++ / C#
Sazoks, 2019-02-26 19:41:03

Pointers and multidimensional arrays (C++)?

Hello! In the course of studying C ++, I came across an interesting site, https://metanit.com
There is a topic of pointers and arrays. Everything is very clear with one-dimensional ones, but two-dimensional ones are somehow bad for me. Can someone please explain what is going on here:

#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;

Thank you all in advance.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
RabraBabr, 2019-02-27
@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;

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question