Есть ли какой-нибудь способ сделать ссылку на массив указателей?
Конкретнее: Есть функция сортировки двухмерного массива, которая работает не с самим массивом а с массивом указателей на него. После сортировки нужно из этой функции вызвать функцию вывода массива на экран в виде таблицы, которая должна работать с ссылкой на массив...
Возможно я что-то не понимаю, но с ссылкой нельзя работать как с двухмерным массивом (что мне нужно), поэтому передать туда двухмерный массив - нельзя.
P.S. исходная задача:
Разработайте программу, в которой пользователь с помощью меню может осуществить следующие действия:
У меня уже есть решение этой задачи НО без указателей и ссылок, с ними все проблемы.
реализуйте функцию, выполняющую сортировку строки (указанна пользователем) в порядке убывания и передайте в качестве параметра двумерный массив по указателю
Если имеется объявление двумерного массива примерно следующим образом
const size_t M = 10;
const size_t N = 20;
// ...
int a[M][N];
то объявление функции сортировки строки массива может выглядеть следующим образом
void sort_row( int ( *a )[N], size_t m, size_t row );
Функция может быть вызвана как
sort_row( a, M, row );
Другая возможность объявить функцию - это следующая
void sort_row( int ( *a )[M][N], size_t row );
и функция может быть вызвана как
sort_row( &a, row );
реализуйте функцию вывода двумерного массива на экран в виде матрицы и передайте ей массив по ссылке
Данная функция может быть объявлена как
void display_matrix( const int ( &a )[M][N] );
и вызвана как
display_matrix( a );
Или может быть объявлена как
std::ostream & display_matrix( const int ( &a )[M][N], std::ostream &os = std::cout );
и вызвана как
display_matrix( a );
Вам не нужно из функции сортировки строки массива вызывать функцию вывод массива на консоль. Можно вывод функции на консоль вызвать из main после вызова функции сортировки строки.
Вот демонстрационная программа вывода массива на консоль
#include <iostream>
#include <iomanip>
const size_t M = 3;
const size_t N = 4;
void display_matrix( const int ( &a )[M][N] )
{
for ( size_t i = 0; i < M; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
std::cout << std::setw( 3 ) << a[i][j] << ' ';
}
std::cout << '\n';
}
}
int main()
{
int a[M][N] =
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
display_matrix( a );
return 0;
}
Или
#include <iostream>
#include <iomanip>
const size_t M = 3;
const size_t N = 4;
std::ostream & display_matrix( const int ( &a )[M][N], std::ostream &os = std::cout )
{
for ( size_t i = 0; i < M; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
os << std::setw( 3 ) << a[i][j] << ' ';
}
os << '\n';
}
return os;
}
int main()
{
int a[M][N] =
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
display_matrix( a );
return 0;
}
Будет получен следующий вывод
1 2 3 4
5 6 7 8
9 10 11 12
Константы
const size_t M = 10;
const size_t N = 20;
должны быть объявлены перед объявлением функций, так как они используются в объявлении функций (при условии, что вы не будете объявлять эти функции как шаблонные).
C++ не разрешает использовать массивы переменной длины, хотя некоторые компиляторы имеют собственные расширения языка с данной поддержкой. Поэтому размеры массива должны быть заданы как константы.
Есть ли какой-нибудь способ сделать ссылку на массив указателей?
Чтобы не путаться с типами, можно работать последовательно:
using pointer = int*;
template <size_t N>
using array_of_pointers = pointer[N];
template <size_t N>
using reference_to_array_of_pointers = array_of_pointers<N>&;
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники