Answer the question
In order to leave comments, you need to log in
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;
Answer the question
In order to leave comments, you need to log in
#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 questionAsk a Question
731 491 924 answers to any question