Como título, quiero saber cómo inicializar el puntero doble con el sizeof de un puntero.
Por ejemplo
int **p=malloc(sizeof *p * rows); for(size_t i = 0; i < rows; i++){ p[i]=malloc(sizeof ? * cols); } ¿Qué debo llenar ? .
Cualquier ayuda sería apreciada.
¿Qué debo rellenar?.
En general cuando tienes
X = malloc(sizeof ? * NUMBER); el ? debe ser reemplazado con el tipo al que apunta X Eso puede escribirse simplemente como *X .
Entonces la línea:
p[i]=malloc(sizeof ? * cols);es para ser:
p[i]=malloc(sizeof *p[i] * cols);Tenga en cuenta que una matriz 2D se puede crear mucho más simple. Todo lo que necesitas es
int (*p)[cols] = malloc(sizeof *p * rows); Aquí p es un puntero a una matriz de cols int . En consecuencia sizeof *p será el tamaño de una matriz de cols int .
El uso de esta técnica basada en VLA significa que puede asignar la matriz 2D utilizando un solo malloc . Además de simplificar el código (es decir, solo 1 malloc ), también garantiza que toda la matriz 2D esté en la memoria consecutiva, lo que puede brindarle un mejor rendimiento de caché.
Parece que desea que p sea una matriz que pueda contener punteros, y el número de punteros es rows . Entonces puedes asignar memoria para p de esta manera:
int ** p = malloc(sizeof(int *) * rows); Ahora, si desea que p[i] apunte a una matriz que contenga cols ints, haga lo siguiente:
p[i] = malloc(sizeof(int) * cols);