• Domingo 28 de Abril de 2024, 23:08

Autor Tema:  Matriz con apuntadores  (Leído 2512 veces)

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Matriz con apuntadores
« en: Martes 12 de Abril de 2011, 03:04 »
0
Hola, quisiera ver si me podían ayudar con este código:

Código: C
  1. #include<stdio.h>
  2. #include<time.h>
  3. void matriz(int (*m)[]);
  4. int main(){
  5.     int m[3][3];
  6.     int i, j;
  7.     srand(time(NULL));
  8.     matriz(m);
  9.     for(i=0;i<3;i++){
  10.         for(j=0;j<3;j++){
  11.             printf("%d ", m[i][j]);
  12.         }
  13.         printf("n");
  14.     }
  15.     return 0;
  16. }
  17. void matriz(int (*m)[]){
  18.     int i, j;
  19.     for(i=0;i<3;i++){
  20.         for(j=0;j<3;j++){
  21.             (*m+i)[j]=rand()%10;
  22.         }
  23.     }
  24. }
  25.  

Lo que quiero hacer es asignarle a la matriz M valores con rand del 0 al 9 pero usando punteros pero esto es lo que me sale:

Output:
Citar
bash-3.1$ gcc matrix.c
bash-3.1$ ./a.out
4 9 7
0 0 134513424
0 134518552 -1078581720

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Matriz con apuntadores
« Respuesta #1 en: Martes 12 de Abril de 2011, 10:16 »
0
Hola. Comentarte un par de cosas antes de ir al tema si me permites:

1) No sirve de nada amontonar el código tal y como lo haces. ¿Qué sales ganando con ello? Nada salvo poca legibilidad. Deja que pase el aire  ^_^
2) Tu pregunta no tiene mucho sentido porque un array en C no es más que un puntero con la memoria ya reservada. En C array = puntero, es decir, int[] = int*.
3) Incluye siempre las cabeceras de las librerías que uses. Aquí te falta stdlib (para usar rand).
4) Nombra las funciones acorde con lo hacen.

Código: C
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. void rellenar_matriz(int *m)
  6. {
  7.     int i;
  8.     for(i = 0; i < 9; i++)
  9.     {
  10.         *(m + i) = rand() % 10;
  11.     }
  12. }
  13.  
  14. int main()
  15. {
  16.     srand(time(NULL));
  17.  
  18.     int m[3][3] = {{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};
  19.     rellenar_matriz((int*)m);
  20.  
  21.     int i, j;
  22.     for(i = 0; i < 3; i++)
  23.     {
  24.         for(j = 0; j < 3; j++)
  25.         {
  26.             printf("%d ", m[i][j]);
  27.         }
  28.         printf("n");
  29.     }
  30.     return 0;
  31. }
  32.  

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Matriz con apuntadores
« Respuesta #2 en: Miércoles 13 de Abril de 2011, 03:47 »
0
Hola,

Creo que gcc incluye por default stdlib.h, así que por eso no la puse.

Otra cosa, en la linea 19:

Código: C
  1. rellenar_matriz((int*)m);
  2.  

cual es la diferencia de pasar solo (int*)m en vez de m?

Gracias por la ayuda  ^_^