Ayuda con punteros

Iniciado por Xenomorfo77, 1 Octubre 2013, 17:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Xenomorfo77

Buenas estoy practicando con punteros y he hecho este programa y funciona bien pero me da warnings y quisiera saber porque son.
El programa crea una baraja de cartas que van del 1 al 10 repetidas 4 veces simulando que hubiese 4 palos. Despues las imprime.

||In function 'main':|
|14|warning: passing argument 1 of 'CrearBaraja' from incompatible pointer type [enabled by default]|
|5|note: expected 'int **' but argument is of type 'int (*)[(sizetype)(ncartas)]'|
|15|warning: passing argument 1 of 'ImprimirBaraja' from incompatible pointer type [enabled by default]|
|6|note: expected 'int **' but argument is of type 'int (*)[(sizetype)(ncartas)]'|
||In function 'CrearBaraja':|
|26|warning: assignment makes pointer from integer without a cast [enabled by default]|
||=== Build finished: 0 errors, 3 warnings (0 minutes, 0 seconds) ===|

Aquí esta el code. ¿Como estaría bien?

Código (cpp) [Seleccionar]

#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>

void CrearBaraja(int *matriz[],int numerocartas);
void ImprimirBaraja(int *matriz[],int numerocartas);

int main()
{
   int j;
   int ncartas=40;
   int cartas[ncartas];

   CrearBaraja(&cartas,ncartas);
   ImprimirBaraja(&cartas,ncartas);


   return 0;
}

void CrearBaraja(int *matriz[],int numerocartas)
{
   int j;
   for(j=0;j<numerocartas;j++)
   {
       matriz[j]=(j%10)+1;

   }
}

void ImprimirBaraja(int *matriz[],int numerocartas)
{
   int j;
   for(j=0;j<numerocartas;j++)
   {
       printf("Carta %d = %d\n",j+1,matriz[j]);
   }
}


Gracias por la ayuda!!

rir3760

El programa tiene algunos errores.

* El primer argumento de las funciones es "int *matriz[]" cuando debería ser "int *matriz" (también es valido "int matriz[]").

* No es necesario el uso del operador "dirección de" (el '&') en las llamadas a función:
CrearBaraja(&cartas, ncartas);
ImprimirBaraja(&cartas, ncartas);


* La declaración del array:
int ncartas=40;
int cartas[ncartas];

En el mejor de los casos es problemático ya que depende del estándar indicado al compilar (en C90 no se permite, en C99 si y en C11 es opcional).

El programa con los cambios:
#include <stdio.h>

#define NCARTAS  40

void CrearBaraja(int *matriz, int numerocartas);
void ImprimirBaraja(int *matriz,int numerocartas);

int main(void)
{
   int cartas[NCARTAS];

   CrearBaraja(cartas, NCARTAS);
   ImprimirBaraja(cartas, NCARTAS);

   return 0;
}

void CrearBaraja(int *matriz, int numerocartas)
{
   int j;
   for(j=0;j<numerocartas;j++)
   {
       matriz[j]=(j%10)+1;

   }
}

void ImprimirBaraja(int *matriz,int numerocartas)
{
   int j;
   for(j=0;j<numerocartas;j++)
   {
       printf("Carta %d = %d\n",j+1,matriz[j]);
   }
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Xenomorfo77

Gracias Jefe!!! Muy claro.