Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MAFUS en 2 Diciembre 2015, 22:16 pm



Título: Una forma curiosa de dar un tamaño.
Publicado por: MAFUS en 2 Diciembre 2015, 22:16 pm
Cuándo se usa la función malloc, por ejemplo, y una llamada básica podría ser algo así:

int *p = malloc(sizeof(int) * 5);

Y ahora viene la parte curiosa y mi planteamiento:

int arr[5] es un array de enteros.
int (*p)[5] es un puntero a un array de 5 enteros.
Lo único que tienen en común los dos son el tipo de dato, int, y el tamaño del array, 5. El nombre que le demos no tiene imporancia. Si se obvia dicho nombre nos debería dar un tamaño pero sin declarar nada.

Por tanto el código antes escrito podría codificarse de una forma un poco más intuitiva:

int *p = malloc( sizeof(int[5]) );

Y funciona, al menos con GCC.

>>> Editado porqué estas líneas no tienen un sentido práctico <<<

También funciona:

int *p = malloc( sizeof(int[5][5]) );

y

int **p = malloc( sizeof(int[5][5]) );


>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<

¿Qué os parece?


Título: Re: Una forma curiosa de dar un tamaño.
Publicado por: ivancea96 en 3 Diciembre 2015, 09:11 am
Y
Código
  1. int**** p = (int****)malloc( sizeof(int[5][5]) );

Realmente, es un método más complejo, pudiendo tener sizeof(int)*N.


Título: Re: Una forma curiosa de dar un tamaño.
Publicado por: furciorifa en 7 Diciembre 2015, 21:33 pm
No tiene nada de raro, es algo básico, si tú intentas mandar una matriz a una funcion como referencia y no das tamaño de columnas te marcará que es de tamaño int (*)[tam], GCC da ese parámetro como mínimo, quizá deberías leer un libro más avanzado de C para terminologías extrañas o diferentes.


Título: Re: Una forma curiosa de dar un tamaño.
Publicado por: MAFUS en 9 Diciembre 2015, 21:57 pm
Sí, pero apuntaba a que no se ve, en C, ese tipo de construcción: int[5], por ejemplo, es mas tipo notación de C#, como en
Código
  1. int[] v = new int[5];
pero sin embargo es válida y muy parecida  :rolleyes:
Código
  1. int* p = malloc(sizeof(int[5]));