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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.86
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
26.02.2012, 20:51     Как правильно передать в функцию указатель на двумерный массив? #1
Сабж
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
#include <windows.h>
#include <stdio.h>
using namespace std;
 
//ОТ безысходности сделал матрицу глобальной
int A [4][4]= {2, 3,4, 6, 7, 8, 9,0, 2, 3, 4, 5, 6, 7, 8, 9};
 
int max_matr (int** matrix) {
 printf ("matrix= %x\n", matrix);
 
 //Тут генерит исключение
 printf ("matrix[0][0]= %d\n", matrix[0][0]);
}
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
int main () {
 
 
 //Объявляем и заполняем матрицу
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, A[i][j]);
   } 
   printf ("\n");
  }    
 
 printf ("A[0][0]= %d\n", A[0][0]);
 printf ("A= %x\n", A);
 max_matr((int**)&A[0][0]);
 
 getchar (); 
 return 0;
}
Адрес передаётся один и тот же, ЧЯДНТ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 20:51     Как правильно передать в функцию указатель на двумерный массив?
Посмотрите здесь:

C++ Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
C++ С++, как передать в функцию двумерный массив указателей на класс
C++ Не знаю как правильно передать указатель
как передать Двумерный массив в функцию, которая вызывается в main? C++
Как правильно передать динамический массив в функцию, увеличивающую его размер, чтобы изменения сохранились C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 21:07     Как правильно передать в функцию указатель на двумерный массив? #2
Не мучайся и используй указатели.
А там всё просто:
void fun(int** a){...}

void main(){
int** a;
fun(a);
}
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
26.02.2012, 21:09     Как правильно передать в функцию указатель на двумерный массив? #3
Цитата Сообщение от Russian_Dragon Посмотреть сообщение
void fun(int** a){...}
void main(){
int** a;
fun(a);
}
Это если динамический массив, а ТС хочет
Цитата Сообщение от kravam Посмотреть сообщение
A [4][4]
Тогда:
C++
1
2
3
void func(int A[][4]){}
//или
void func (int (*A)[4]) {}
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
26.02.2012, 21:17     Как правильно передать в функцию указатель на двумерный массив? #4
Можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Set(int arr[], int f_ind, int s_ind){
 
        for(int i = 0; i < f_ind; i++ ){
 
                for(int j = 0; j < s_ind; j++ ){
 
                arr[i * s_ind + j] = rand() % 50;   // ЗАПОЛНЯЕМ СЛУЧАЙНЫМИ ЧИСЛАМИ 
 
                printf(" %d ",arr[i * s_ind + j] );   //   ВЫВОД
                }}}
 
int main()
{
        srand (time(NULL));
 
        int farr[M][N];
 
        Set(*farr, M, N); //
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.02.2012, 23:39     Как правильно передать в функцию указатель на двумерный массив? #5
kravam,
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
#include <iostream>
 
template<typename T, size_t M, size_t N>
void print_matrix(T (&matrix)[M][N])
{
    for (size_t i = 0; i < M; ++i)
    {
        for (size_t j = 0; j < N; ++j)
            std::cout << matrix[i][j] << "  ";
        
        std::cout << std::endl;
    }
}
 
int main()
{
    int a[2][2] =
    {
        {1, 2},
        {3, 4}
    };
    
    double b[3][4] = 
    {
        {0.1, 0.2, 0.3, 0.4},
        {1.5, 1.6, 1.7, 1.8},
        {2.1, 2.2, 2.3, 2.4}
    };
    
    print_matrix(a);
    print_matrix(b);
    
    return 0;
}
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
27.02.2012, 23:52  [ТС]     Как правильно передать в функцию указатель на двумерный массив? #6
Сложности такие сложности... Помню раньше на g++ 3.4.2 писал
C++
1
2
int**a;
a[2][3];
И не надо было думать о размерностях...
Yandex
Объявления
27.02.2012, 23:52     Как правильно передать в функцию указатель на двумерный массив?
Ответ Создать тему
Опции темы

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