Una forma curiosa de dar un tamaño.

Iniciado por MAFUS, 2 Diciembre 2015, 22:16 PM

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

MAFUS

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?

ivancea96

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

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

furciorifa

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.

MAFUS

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 (csharp) [Seleccionar]
int[] v = new int[5]; pero sin embargo es válida y muy parecida  :rolleyes:
int* p = malloc(sizeof(int[5]));