Gostaria de saber como faço pra retornar uma matriz bidimensional de uma funcao. ALguem pode ajudar?
Acho que se vc retornar um ponteiro de ponteiro (isso mesmo!!!) pode dar certo…Por exemplo:
int** calcula(…)
kra, pior que nao rolou:
int** teste(int matriz[][MAX], int size)
{
int m[size][MAX];
for (int i = 0; i < size; i++) for (int j = 0; j < size; j++) m[i][j] = 0;
return m;
}
da erro de compilacao
É pq vc está utilizando uma matriz estática…tente alocação dinâmica… como isso:
int** matriz = new int*[numLinhas];
for(int i = 0; i < numLinhas; i++)
matriz[i] = new int[numColunas];
funcionou kra! mto obrigado!
me diz outra coisa… eu tenho uma funcao para zerar uma matriz que eu passei por parametro. mas essa funcao teria que receber essa matriz ser por referencia, certo? como eu faco isso?
precisa sim…Na verdade vc precisa passar “int**” como no tipo de retorno. Vou te dar outra dica…verifique a classe vector da stl…é bem mais fácil manipular essas coisas com ela.
opa… pois e, estou ciente da vector, mas gostaria de usar matriz assim, sabe? tinha um codigo desses usando matriz assim:
e recebia na funcao para zerar a matriz assim: void zerar(vector<vector<int> >& matriz)
, mas lidando com matriz usando [][] não sei como fazer…
valeu!
ah, outra duvida e
quando eu faco matriz = new int*[x];
eu quero dizer, quero um vetor de ponteiros para inteiro de x elementos, certo? seria as colunas da matriz (ou melhor, a quantidade de colunas)? entao se eu fizer algo como matriz =new int*[x];
for (int i = 0; i < x; i++)
matriz[i] = new int[y];
}
onde y e a quantidade de linhas?
abraço.
Opa.
Quando você usa ponteiros (da maneira como está fazendo) para a função, se você mudar a matriz lá dentro, ela já é modificada em toda a execução do programa (ou seja, ela já é passada por referência).
Por exemplo:
[code]
#include
using namespace std;
void inicializarMatriz(int **matriz, int linhas, int colunas)
{
for (int i = 0; i < linhas; i++)
{
for (int j = 0; j < colunas; j++)
{
matriz[i][j] = (i * j);
}
}
}
void apresentarMatriz(int **matriz, int linhas, int colunas)
{
cout << endl;
for (int i = 0; i < linhas; i++)
{
for (int j = 0; j < colunas; j++)
{
cout << matriz[i][j] << " ";
}
cout << endl;
}
}
int main()
{
int **matriz;
int linhas = 3;
int colunas = 5;
matriz = new int*[linhas];
for (int i = 0; i < linhas; i++)
{
matriz[i] = new int[colunas];
}
inicializarMatriz(matriz, linhas, colunas);
apresentarMatriz(matriz, linhas, colunas);
cout << endl;
return 0;
}[/code]
Isso vai criar uma matriz e atribuir alguns valores a ela. Agora, se você criar uma matriz lá dentro da função (ou seja, usar o new int[colunas] dentro da função), vai dar pau (ou melhor, falha de segmentação), porque a matriz é criada e mantida somente no escopo da função (ou seja, a matriz é deletada da memória assim que a função terminar). Uma boa opção, nesse caso, é criar uma matriz e retornar (pela função) para a matriz criada na main.
Abraço.