Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/544: Рейтинг темы: голосов - 544, средняя оценка - 4.65
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301

Как передать двухмерный массив в функцию?

24.11.2011, 23:14. Показов 105782. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как в функцию передать двухмерный массив? Пробовал так:
C++
1
2
3
4
5
6
7
8
9
void FuncArr(int** arr){ 
arr[1][2] = 111111; 
} 
 
void main(void){ 
int arr[255][255]; 
FuncArr(arr); 
cout << arr[1][2] << endl; 
}
Но выдает ошибку:
невозможно преобразовать параметр 1 из 'int [255][255]' в 'int **'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2011, 23:14
Ответы с готовыми решениями:

Как в функцию передать параметр - двухмерный массив
void max_el() { int i,j,max; for ( i=1 ; i&lt;=n; i++) for ( j=1; j&lt;=m; j++) //nahodim maksimalnii element...

Как передать двухмерный массив в функцию по ссылке?
Преподаватель в универе просит написать функцию вида void st3(&amp;array, &amp;n, &amp;m). Бьюсь головой об стол уже второй день и никак не могу найти...

Как передать в функцию двухмерный динамический массив по ссылке?
как передать в функцию двухмерный динамический массив по ссылке?

16
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 23:15
Так можно было бы передать массив ссылок, а в вашем случае несколько вариантов, например

void FuncArr(int arr[255][255])
1
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
24.11.2011, 23:20  [ТС]
Отлично, как раз перед этим в сети нашел еще пару решений но все кривые, спасибо большое)))
0
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
24.11.2011, 23:25
C++
1
2
3
4
5
6
7
8
9
void FuncArr(int* arr, int rowlen){ 
arr[ 1 * rowlen + 2] = 111111;
} 
 
void main(void){ 
int arr[255][255]; 
FuncArr(*arr, 255); 
cout << arr[1][2] << endl; 
}
0
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
25.11.2011, 02:06  [ТС]
Народ, пока тему не закрыли хотел спросить а как дсделать тоже самое с двухмерным динамическим массивом, у меня он почему то лезит куда то не туда, я его создаю, float **Massiv = new float*[255];
все компилируется как надо, но при попытки в него что то записать пишет "Нарушение рпав доступа при записи"

Добавлено через 49 минут
Все вссем спс, разобрался
0
1 / 1 / 1
Регистрация: 10.11.2011
Сообщений: 48
25.11.2011, 18:18
Парни помогите, чего-то я не догоняю!
у меня есть функция kol она считает сколько столбцов с нулевым элементом встречается и плюсует в переменную g!

если делать не через функцию все работает.
у меня в g выводит 0!(если через функцию делать)
сорри за код я его не форматировал!

где допустил касяк?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int kol (int A[100][100],int n,int m,int g){ // подсчет нулевых элементов
 
for ( int j = 0; j < n; j++ ){
  for ( int i = 0; i < m; i++ ){
 
      if ( A[i][j] == 0 ){
         g++;
      }
   }
}
return 0;
}
 
 
 
int main(){
const int k=100;    
int n,m;
int g=0;
int A[k][k];
int i,j;
setlocale(LC_ALL, "rus");
cout<<"Введите размеры матрицы "<<endl;
cin >>n>>m;
 
for(i=0;i<n;i++)
    for(j=0;j<m;j++){
        cout<<"a["<<i<<","<<j<<"] = ";
            cin>>A[i][j];   
        
                    }
 
cout << "Вот Ваша матрица:" << endl << endl;
 for (int i=0;i<n;i++){
    for(int j=0; j<m;j++)
        cout<<"  "<< A[i][j]<< " ";
            cout<<endl;     
                    }
 
 
 
 
  
 kol(A,n,m,g); //вызов функции!
 cout<<"количество столбцов, содержащих хотя бы один нулевой элемент: "<<g<<endl;
    
 system("pause");
return 0;
 
}
0
40 / 40 / 32
Регистрация: 24.11.2012
Сообщений: 200
24.11.2012, 15:34
>> bam32
насколько я помню, функция не может изменять переданные ей аргументы. ты же пытаешься изменить g. попробуй в main инициализировать g=5 например и просмотри, что тебе выведет программа. если 5, значит я прав, если 0, значит ошибка в другом
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 17:16
Нужно g по ссылке передавать:
C++
1
2
int kol (int A[100][100],int n,int m,int &g)
{}
Добавлено через 4 минуты
Или так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int kol (int A[100][100],int n,int m,int g){ // подсчет нулевых элементов
 
for ( int j = 0; j < n; j++ ){
  for ( int i = 0; i < m; i++ ){
 
      if ( A[i][j] == 0 ){
         g++;
      }
   }
}
return g;
}
...
g = kol(A,n,m,g); //вызов функции!}
0
 Аватар для fair7
13 / 13 / 1
Регистрация: 31.12.2010
Сообщений: 131
Записей в блоге: 14
24.10.2018, 22:47
В последних квадратных скобках указывается размер:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <conio.h>
 
#define LenName 28
#define number_of_players 16
struct TwoElements{unsigned char nether:4,upper:4;};
void showPlayers16_Name(TwoElements const Name[][number_of_players])
{
    for(char y=number_of_players;y--;printf("\n"))for(char i=LenName/2,m;i--;)
    {
            m=i>>1;
            printf("%c",((i%2)?Name[m][y].nether:Name[m][y].upper)+48);
    }
 
}
int main()
{
    TwoElements Players16_Name[LenName/2][number_of_players]={0};
    for(char i=LenName/2,m;i--;)
    {
            m=i>>1;
        (i%2)?Players16_Name[m][4].nether=i:Players16_Name[m][4].upper=i;
    }
    showPlayers16_Name(Players16_Name);
    getch();
    return 0;
}
0
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
24.10.2018, 23:03
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void f1(int** array) {
}
 
void f2(int* array[]) {
}
 
void f3(auto array) {
}
 
template<typename type>
void f4(type array) {
}
 
void f5(int array[][3]) {
}
 
int main() {
    int arr[2][3];
    
    f1((int**)arr);
    f2((int**)arr);
    f3(arr);
    f4(arr);
    f5(arr);
    
    return 0;
}
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
24.10.2018, 23:43
Цитата Сообщение от sty4ent Посмотреть сообщение
C++
1
2
3
4
void f1(int** array) {
}
void f2(int* array[]) {
}
В вашем случае это не сработает.

Цитата Сообщение от sty4ent Посмотреть сообщение
C++
1
2
f1((int**)arr);
* * f2((int**)arr);
Вот, говорю же не сработает, не красиво так делать.

Как по мне один из самых элегантных методов такой:
C++
1
2
3
template <std::size_t width, std::size_t height>
void foo(int (&arr)[width][height])
{}
0
143 / 92 / 34
Регистрация: 30.01.2018
Сообщений: 469
25.10.2018, 01:23
Цитата Сообщение от Thinker Посмотреть сообщение
массив ссылок
А такой разве бывает?
Поскольку ссылки не являются объектами, отсутствуют массивы ссылок, указатели на ссылки и ссылки на ссылки

https://en.cppreference.com/w/... /reference
0
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
25.10.2018, 01:24
Цитата Сообщение от Azazel-San Посмотреть сообщение
Как по мне один из самых элегантных методов такой
на заметку, есть в C++ магическое слово auto
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
25.10.2018, 01:52
Цитата Сообщение от sty4ent Посмотреть сообщение
на заметку, есть в C++ магическое слово auto
C++
1
2
3
4
5
6
7
8
void f3(auto array) {
}
 
int main() {
    int arr[2][3];
    
    f3(arr);
}
Code
1
2
3
prog.cc:1:9: error: 'auto' not allowed in function prototype
void f3(auto array) {
        ^~~~
0
44 / 20 / 14
Регистрация: 23.10.2018
Сообщений: 103
25.10.2018, 02:01
Цитата Сообщение от rat0r Посмотреть сообщение
prog.cc:1:9: error: 'auto' not allowed in function prototype
void f3(auto array) {
наверно надо сделать, чтобы при сборке использовался c++14, для g++ это делается так:
g++ -std=c++14 ...

Добавлено через 1 минуту
или можно использовать шаблоны:
C++
1
2
3
template<typename t>
void func(t data) {
}
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
25.10.2018, 02:02
Цитата Сообщение от sty4ent Посмотреть сообщение
наверно надо сделать, чтобы при сборке использовался c++14, для g++ это делается так:
g++ -std=c++14 ...


Добавлено через 35 секунд
Цитата Сообщение от sty4ent Посмотреть сообщение
или можно использовать шаблоны:
Магического слова auto уже нет?
1
 Аватар для fair7
13 / 13 / 1
Регистрация: 31.12.2010
Сообщений: 131
Записей в блоге: 14
25.10.2018, 18:56
а вот ещё пример (взял из другого сайта и переделал на свой манер):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#define P printf
#define endl P("\n")
 
template <int row, int col>
void funArray(int (&arr)[row][col])
{
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++)
            P("%3i ",arr[i][j]);
            endl;
    }
}
 
int main()
{
    int Arr[5][6]={
                    {2,13,2,5,0,3},
                    {12,3,5,0,7,5},
                    {1,2,3,4,5,-4},
                    {621,11,2,3,4,8},
                    {3,5,3,7,9,12}
                   };
 
    funArray(Arr);endl;
    P("Enter - EXIT");
    getchar();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2018, 18:56
Помогаю со студенческими работами здесь

Передать двухмерный массив в функцию
Допустим, у меня есть двухмерный массив символов char level = { &quot; &quot;, &quot; &quot;, &quot; ...

Передать двухмерный массив структур в функцию
Всем привет. Есть такой код - struct Array { float a; float b; }; void wr() {

Передать в функцию динамический двухмерный массив с динамическими размерами
Как передать динамический двухмерный массив с динамическими размерами? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include...

Как передать двухмерный массив
Примеров передачи много, но как быть в моем сучае, если я определяю функцию как: float det(float* M, int n) { if (n == 1) {...

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru