Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 147, средняя оценка - 4.96
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
24.11.2011, 23:14     Как передать двухмерный массив в функцию? #1
Подскажите пожалуйста, как в функцию передать двухмерный массив? Пробовал так:
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, приведение в стиле С или приведение в стиле функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 23:15     Как передать двухмерный массив в функцию? #2
Так можно было бы передать массив ссылок, а в вашем случае несколько вариантов, например

void FuncArr(int arr[255][255])
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
24.11.2011, 23:20  [ТС]     Как передать двухмерный массив в функцию? #3
Отлично, как раз перед этим в сети нашел еще пару решений но все кривые, спасибо большое)))
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
24.11.2011, 23:25     Как передать двухмерный массив в функцию? #4
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; 
}
shtopor20
31 / 20 / 0
Регистрация: 21.05.2010
Сообщений: 301
25.11.2011, 02:06  [ТС]     Как передать двухмерный массив в функцию? #5
Народ, пока тему не закрыли хотел спросить а как дсделать тоже самое с двухмерным динамическим массивом, у меня он почему то лезит куда то не туда, я его создаю, float **Massiv = new float*[255];
все компилируется как надо, но при попытки в него что то записать пишет "Нарушение рпав доступа при записи"

Добавлено через 49 минут
Все вссем спс, разобрался
bam32
1 / 1 / 0
Регистрация: 10.11.2011
Сообщений: 48
25.11.2011, 18:18     Как передать двухмерный массив в функцию? #6
Парни помогите, чего-то я не догоняю!
у меня есть функция 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;
 
}
Agent Smith
40 / 40 / 9
Регистрация: 24.11.2012
Сообщений: 200
24.11.2012, 15:34     Как передать двухмерный массив в функцию? #7
>> bam32
насколько я помню, функция не может изменять переданные ей аргументы. ты же пытаешься изменить g. попробуй в main инициализировать g=5 например и просмотри, что тебе выведет программа. если 5, значит я прав, если 0, значит ошибка в другом
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 17:16     Как передать двухмерный массив в функцию?
Еще ссылки по теме:

Как передать двухмерный массив C++
C++ Передать в поток двухмерный массив
C++ Передать в функцию динамический двухмерный массив с динамическими размерами

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 17:16     Как передать двухмерный массив в функцию? #8
Нужно 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); //вызов функции!}
Yandex
Объявления
24.11.2012, 17:16     Как передать двухмерный массив в функцию?
Ответ Создать тему
Опции темы

Текущее время: 07:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru