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?
Y
int**** p = (int****)malloc( sizeof(int[5][5]) );
Realmente, es un método más complejo, pudiendo tener sizeof(int)*N.
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.
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 int[] v = new int[5];
pero sin embargo es válida y muy parecida :rolleyes:
int* p = malloc(sizeof(int[5]));