Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359

Возможна ли передача двумерного массива в качестве аргумента функции по ссылке

01.10.2016, 17:27. Показов 2174. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно передать двумерный массив в функцию.
Понятно, что можно сделать так:

C++ (Qt)
1
2
3
4
5
6
7
8
void point_to_matrix(double**A,int n_row,int n_column){
//занулили все по n, m 
    for(int i=0;i<n_row;i++){
        for(int j=0;j<n_column;j++){
            A[i][j]=0;
        }
    }
}
А можно ли передать параметр по ссылке?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2016, 17:27
Ответы с готовыми решениями:

Передача двумерного массива в качестве аргумента функции
Подскажите пожалуйста что не так? (Подчёркивает вот тут вот index(A); аргумент функции). Объясните пожалуйста в чём моя ошибка. ...

Передача массива в качестве аргумента функции
В общем нужно передать массив в качестве аргумента без указания его размера, чтобы в дальнейшем присвоить все его содержимое другому...

передача процедуре (функции) массива в качестве аргумента
пробую передать процедуре массив в виде аргумента &quot;procedure asd(Mass:array of integer&quot;, но выдаёт ошибку &quot;Error 54: OF...

12
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 17:33
Цитата Сообщение от Zigfrid Посмотреть сообщение
А можно ли передать параметр по ссылке?
Можно. Если твой массив - это настоящий языковой массив, а не структура данных на указателях. Например так:
C++
1
2
3
4
5
6
7
8
9
10
template <size_t R, size_t C>
void point_to_matrix(double (&A)[R][C])
{
//занулили все по n, m 
    for(size_t i = 0;i < R; i++){
        for(size_t j = 0; j < C; j++){
            A[i][j]=0;
        }
    }
}
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
01.10.2016, 17:50  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
это настоящий языковой массив
А что такое языковой массив?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.10.2016, 17:52
Zigfrid, вам намекают, что ваш double**A - это не массив. А указатель на указатель - а что скрывается за этими адрессами не знает никто)
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
01.10.2016, 17:58  [ТС]
А можете кинуть ссылку, где про это можно поподробнее прочитать?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 18:04
Цитата Сообщение от Zigfrid Посмотреть сообщение
А что такое языковой массив?
Тип "Массив", который предоставляет система типов языка C++.
Т.е., например, вот:
C++
1
int arr[5][5];
Здесь arr - это массив, его тип int[5][5]. Соответственно его можно использовать, чтобы получить ссылку на массив (что требовалось в исходном сообщении темы). Ссылка будет выглядеть так:
C++
1
int (&arrRef)[5][5] = arr;
Если же ты составил многомерный массив из массива указателей и последовательного выделения памяти для подмассивов, то этот массив будет являться структурой данных "многомерный массив", но не будет поддерживаться системой типов языка в качестве именно многомерного массива - он так и останется массивом указателей. Следовательно получить ссылку на него, именно как ссылку на многомерный массив будет нельзя. Только ссылку на массив указателей.
4
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
01.10.2016, 18:08  [ТС]
DrOffset, благодарю за развернутый ответ!
Цитата Сообщение от DrOffset Посмотреть сообщение
Только ссылку на массив указателей.
А это уже будет извращением и так видимо никто не делает?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.10.2016, 18:12
Zigfrid, ну в противной случаи прийдется таскать за собой всегда размер этого "массива" - как делают в СИ, как делает std::vector. А языковый массив - знает размер на этапе компиляции и всегда об это размере можно у него спросить, кроме extern
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 19:09
Цитата Сообщение от Zigfrid Посмотреть сообщение
А это уже будет извращением и так видимо никто не делает?
Отчего же, делают. В соответствующих потребности ситуациях.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
01.10.2016, 19:14
Цитата Сообщение от DrOffset Посмотреть сообщение
Если твой массив - это настоящий языковой массив, а не структура данных на указателях.
C++
1
2
3
4
5
6
7
8
void point_to_matrix(double**(&A),int n_row,int n_column){
//занулили все по n, m 
    for(int i=0;i<n_row;i++){
        for(int j=0;j<n_column;j++){
            A[i][j]=0;
        }
    }
}
работает
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.10.2016, 20:32
Цитата Сообщение от _stanislav Посмотреть сообщение
работает
И что? Разве это ссылка на массив?
Это ссылка на указатель на указатель.
Не путайте понятия. Напомню, что тема топика:
передача двумерного массива в качестве аргумента функции по ссылке
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.10.2016, 00:49
Цитата Сообщение от Zigfrid Посмотреть сообщение
А можно ли передать параметр по ссылке?
DrOffset, я думал про вот этот вопрос.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.10.2016, 03:16
Цитата Сообщение от Zigfrid Посмотреть сообщение
А можете кинуть ссылку, где про это можно поподробнее прочитать?
Как добавить объект в массив объектов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2016, 03:16
Помогаю со студенческими работами здесь

Передача массива данных пользовательского типа в качестве аргумента функции
Добрый день! массив ParamArray всегда имеет тип данных Variant В функцию передаются пользователем по 3 элемента...

Передача двумерного массива указателей на char в качестве параметра функции
Есть массив char *result2; Нужно передать его в функцию void defDouble(???) в качестве одного из параметров . Как будет выглядеть...

Передача функции в качестве аргумента
Передаю в функцию (А) в качестве аргумента другую функцию (Б). В функцию Б передаю переменную из А, но массив аргументов оказывается пуст....

Передача функции в качестве аргумента массив
Помогите пожалуйста! есть некая рекурсивная функция N которая принимает 2 целочисленные переменные и массив; void N(int, int,...

Передача объекта в качестве аргумента функции (метода)
На &quot;Интуите&quot; имеем код: class Complex { public: int real; // вещественная часть int imaginary; // мнимая часть ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru