11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
1

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

01.10.2016, 17:27. Показов 1468. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2016, 17:27
Ответы с готовыми решениями:

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

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

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

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

12
16493 / 8987 / 2204
Регистрация: 30.01.2014
Сообщений: 15,603
01.10.2016, 17:33 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от DrOffset Посмотреть сообщение
это настоящий языковой массив
А что такое языковой массив?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.10.2016, 17:52 4
Zigfrid, вам намекают, что ваш double**A - это не массив. А указатель на указатель - а что скрывается за этими адрессами не знает никто)
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
01.10.2016, 17:58  [ТС] 5
А можете кинуть ссылку, где про это можно поподробнее прочитать?
0
16493 / 8987 / 2204
Регистрация: 30.01.2014
Сообщений: 15,603
01.10.2016, 18:04 6
Цитата Сообщение от 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  [ТС] 7
DrOffset, благодарю за развернутый ответ!
Цитата Сообщение от DrOffset Посмотреть сообщение
Только ссылку на массив указателей.
А это уже будет извращением и так видимо никто не делает?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.10.2016, 18:12 8
Zigfrid, ну в противной случаи прийдется таскать за собой всегда размер этого "массива" - как делают в СИ, как делает std::vector. А языковый массив - знает размер на этапе компиляции и всегда об это размере можно у него спросить, кроме extern
0
16493 / 8987 / 2204
Регистрация: 30.01.2014
Сообщений: 15,603
01.10.2016, 19:09 9
Цитата Сообщение от Zigfrid Посмотреть сообщение
А это уже будет извращением и так видимо никто не делает?
Отчего же, делают. В соответствующих потребности ситуациях.
0
"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
01.10.2016, 19:14 10
Цитата Сообщение от 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
16493 / 8987 / 2204
Регистрация: 30.01.2014
Сообщений: 15,603
01.10.2016, 20:32 11
Цитата Сообщение от _stanislav Посмотреть сообщение
работает
И что? Разве это ссылка на массив?
Это ссылка на указатель на указатель.
Не путайте понятия. Напомню, что тема топика:
передача двумерного массива в качестве аргумента функции по ссылке
0
"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
02.10.2016, 00:49 12
Цитата Сообщение от Zigfrid Посмотреть сообщение
А можно ли передать параметр по ссылке?
DrOffset, я думал про вот этот вопрос.
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.10.2016, 03:16 13
Цитата Сообщение от Zigfrid Посмотреть сообщение
А можете кинуть ссылку, где про это можно поподробнее прочитать?
Как добавить объект в массив объектов?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2016, 03:16
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru