Olá pessoal,
hoje vamos tentar trabalhar um pouco com arrays bidimensionais, mais especificamente em como passá-los como parâmetros de funções.
Para isso vamos escrever duas funções, uma para imprimir um array e outra para preencher.
No exemplo vamos utilizar um array de 3 por 4.
void ImprimeMatriz(int matriz[][4], int linha)
{
int c_linha; //conta linhas
int c_coluna;//conta colunas
int coluna = 4;
for(c_linha = 0; c_linha < linha; c_linha++)
{
printf("\n");
for(c_coluna = 0; c_coluna < coluna; c_coluna++)
printf("%d ", matriz[c_linha][c_coluna]);
}
}
void PreencheMatriz(int matriz[][4], int linha)
{
int contador = 0;
int c_linha; //conta linhas
int c_coluna;//conta colunas
int coluna = 4;
for(c_linha = 0; c_linha < linha; c_linha++)
{
for(c_coluna = 0; c_coluna < coluna; c_coluna++)
matriz[c_linha][c_coluna] = contador++;
}
}
Veja que, temos que passar o tamanho da linha como parâmetro da matriz, vejas as assinaturas: void PreencheMatriz(int matriz[][4], int linha) e void ImprimeMatriz(int matriz[][4], int linha)
Bom, isso porque na verdade é passado o endereço do array, e o C precisa saber até onde ele pode ir na linha.
Outra possibilidade é utilizarmos aritmética de ponteiros, na verdade, um array é um conjunto contínua na memória, assim por exemplo, se o endereço inicial é 10, e um inteiro ocupar 2 bytes temos que o primeiro elemento está no endereço 10, o segundo no endereço 12, o terceiro no 14.... Isso deve ser bem observado, por exemplo para chegar no endereço 12, se nosso endereço base é 10, fazemos a seguinte operação com nosso ponteiro: ponteiro +1, ou seja, o + 1 diz que vamos para o próximo endereço, com o passo de acordo com nosso tipo, que no exemplo é int e assumimos que ele é de 2 bytes. Vejamos abaixo uma função que vai fazer esse tipo de operação para imprimir nosso array:
void ImprimeMatrizPonteiros(int * matriz, int tamanho)
{
int cont = 0;
for (cont = 0; cont < tamanho; cont ++)
{
printf("% d", *(matriz + cont));
}
}
Nosso método main:
int main()
{
int matriz[3][4];
PreencheMatriz(matriz,3);
ImprimeMatriz(matriz,3);
printf("\nVamos usar apenas ponteiros:\n");
ImprimeMatrizPonteiros(matriz[0],12);
return 0;
}
que irá reproduzir a seguinte saída:
Nenhum comentário:
Postar um comentário