/ / c problemas de matriz de linguagem - c, matrizes, ponteiros

problemas de matriz de linguagem c - c, arrays, ponteiros

Oi Eu sou novo no idioma c eu tenho um problema: Eu quero enviar uma matriz 2D para uma função via ponteiro. A função deve retornar o ponteiro para a matriz 2-d. Eu escrevi o seguinte código para isso:

#include<stdio.h>
int* put(int *b);
int main()
{
int a[2][3],i,j;
system("clear");
put(a);

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("na[%d][%d]= %d",i,j,a[i][j]);
}
}

return 0;
}

int* put(int *b)
{
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[i][j]=i;
}
}
return b;
}

quando eu compilar com gcc2de.c mostra os seguintes erros:

2de.c: In function ‘main’:
2de.c:9: warning: passing argument 1 of ‘put’ from incompatible pointer type
2de.c:3: note: expected ‘int *’ but argument is of type ‘int (*)[3]’
2de.c: In function ‘put’:
2de.c:28: error: subscripted value is neither array nor pointer
2de.c: In function ‘main’:
2de.c:32: error: expected declaration or statement at end of input

Do que eu acabei de alterar o código da função que se segue:

#include<stdio.h>

int* put(int **b);

int main()
{
int a[2][3],i,j;
system("clear");
put(a);

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("na[%d][%d]= %d",i,j,a[i][j]);
}
}

return 0;
}

int* put(int **b)
{
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[i][j]=i;
}
}
return b;
}

quando cumpro, tenho os seguintes erros:

2de.c: In function ‘main’:
2de.c:9: warning: passing argument 1 of ‘put’ from incompatible pointer type
2de.c:3: note: expected ‘int **’ but argument is of type ‘int (*)[3]’
2de.c: In function ‘put’:
2de.c:31: warning: return from incompatible pointer type
2de.c: In function ‘main’:
2de.c:32: error: expected declaration or statement at end of input
2de.c: In function ‘main’:
2de.c:9: warning: passing argument 1 of ‘put’ from incompatible pointer type
2de.c:3: note: expected ‘int **’ but argument is of type ‘int (*)[3]’
2de.c: In function ‘put’:
2de.c:31: warning: return from incompatible pointer type
2de.c: In function ‘main’:
2de.c:32: error: expected declaration or statement at end of input

o que estou fazendo de errado? alguém pode me dizer qual é o caminho para passar 2d-array via ponteiros para uma função? alguém pode me dizer como retornar dois d matriz via ponteiro em uma função

Respostas:

0 para resposta № 1

O primeiro erro que você tem é que você não estápassando um tipo correto, conforme declarado por sua função. Portanto, para limpar seu código com a menor quantidade de correções, provavelmente seria algo parecido com isto:

#include<stdio.h>

void put(int *b);

int main()
{
int a[2][3],i,j;

put(&a[0][0]);

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("na[%d][%d]= %d", i, j, a[i][j]);
}
}

printf("nn");

system("PAUSE");  // Not recommended, but works for now
return 0;
}

void put(int *b)
{
int count = 1;
int i, j;

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
//b[i][j]=i;
*(b + ((i*3) + j)) = count++;
}
}

}

As duas principais correções são:

  1. Você passa o endereço inicial do seu array 2D explicitamente, endereçando-o como & a [0] [0].
  2. Além disso, observe a aritmética do ponteiro que você precisará usar quando usar um int * b também.

Observe também que, como você está passando um ponteiro, está modificando o valor nesse local de endereço. Portanto, não há necessidade de retornar um ponteiro.

Espero que ajude. Felicidades!


0 para resposta № 2

de onde você está armazenando o valor de retorno put ?

a declaração deve ser int** put( int **) de acordo com o seu código.


0 para resposta № 3

O primeiro erro que você tem é que você está tentando definir uma função dentro de outra função. A coisa mais simples a fazer é apenas definir put onde você declara:

int put()
{
/* definition of put */
}

int main()
{
/* body calls put */
}

O segundo problema é que em nenhum trecho de código você está passando um parâmetro compatível para put.

Se você quiser passar a para uma função, observe que as matrizes como argumentos sempre decaem para um ponteiro para o primeiro elemento.

a tem tipo int [2][3], ou seja, uma matriz de 2 matrizes de 3 ints. Isso decairá para um ponteiro para uma matriz de 3 ints ou int (*)[3]. Isso deve explicar o erro de compilação que você está recebendo. Você deve declarar put ou como:

void put(int (*b)[3]);

ou como o equivalente completamente:

void put(int b[][3]);

Como você não pode passar matrizes por valor, o compilador converterá automaticamente uma declaração de função que leva um parâmetro de matriz para um que aceita o parâmetro equivalente do ponteiro.

Alterei o tipo de retorno para void pois você não usa ou precisa do valor de retorno ao passar o parâmetro por ponteiro. Você deve remover return b; da sua definição de put.

Dica: Não pense em int[2][3] como uma matriz 2-d, mas como uma matriz de matrizes.


0 para a resposta № 4

Você não pode retornar um array 2d de uma função em C, você pode retornar um array 1d de ponteiros para os primeiros elementos de um array 2D.

Talvez você possa achar útil isso:

Passar 2d array para funcionar em C?

ou isto:

C ++ Retornando matriz multidimensional da função


0 para a resposta № 5

1. você deve declarar ou definir a função antes de usá-la, é diferente com outras linguagens populares.

2.Você não precisa retornar o ponteiro na função colocada, os dados na matriz foram alterados

3. você precisava observar o tipo, o tipo de matriz int [] [] é int **