Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++ Ubuntu, как передать двумерный массив в функцию.

Ксения Данченко Мастер (2239), на голосовании 8 лет назад
В общем есть: main.cc, input.cc и хедер файл input.h
#include"input.h"

using namespace std;

int main(){

int rows=5,colums=5;
int m[rows][colums];

init(m,rows,colums);

return 0;
}
//////////////////input///////////////////////////////
#include
#include "input.h"

using namespace std;

void init(int** array, int rows,int colums){

int i,j;
for(i=0;i<rows;i++){
for(j=0;j<colums;j++){
cout<<array[i][j];}
}

}

/////////хедер//////////////////
void init(int *array, int rows,int colums);

Подскажите как сделать чтобы оно работало, в гугле решения не смог найти, чтобы с хедер файлом было.
Голосование за лучший ответ
Капитан Гугл Искусственный Интеллект (146215) 8 лет назад
int m[rows][colums]; m - это указатель на int
int** array; array - это указатель на указатель на int
структуры разные в памяти, вот и получается бред. Вариантов много, но всегда надо передавать именно то, что принимает функция. Например, динамически создавать массив (вариант с int**) или передавать указатель на массив фиксированного размера (вариант с [][]). Или создавать и передавать одномерный массив размером m*n, а к i,j-тому элементу обращаться как ar[i*m+j].
‮Haskell CurryГуру (2945) 8 лет назад
> int m[rows][colums]; m - это указатель на int
m — это указатель на int[colums]
‮Haskell CurryГуру (2945) 8 лет назад
Точнее, m — это int[rows][colums], но m можно развалить до указателя на int[colums]: *int[colums]
Капитан Гугл Искусственный Интеллект (146215) Совершенно верно, но этот int[columns] состоит из int-ов, и m, в конечном результате, указывает на начало этого массива, я это имел в виду. Не хотел много писать.
u0atgKIRznY5 Ученик (132) 6 лет назад
> int m[rows][colums]; m - это указатель на int

https://wandbox.org/permlink/5UBleWUKarb3XxfU
‮Haskell Curry Гуру (2945) 8 лет назад
template< typename T, size_t rows, size_t columns >
void init(T (&array)[rows][columns])
{

}

http://ideone.com/1EePy5
Похожие вопросы