Aquí tengo un puntero ptr
a una matriz arr
de 4 enteros. ptr
apunta a toda la matriz. ptr[0]
o *ptr
apunta al primer elemento de la matriz, por lo que sumar 1 a ptr[0]
da la dirección del segundo elemento de la matriz.
No puedo entender por qué usar sizeof(ptr[0])
da el tamaño de toda la matriz, 16 bytes, no el tamaño del primer elemento, 4 bytes, (como ptr[0]
apunta al primer elemento de la matriz).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;
? En realidad no. int (*ptr)[4]
crea ptr
como un puntero a una matriz completa de cuatro int
valores. Una sintaxis de puntero como esa es necesaria para asignar dinámicamente matrices multidimensionales verdaderas. Las "matrices bidimensionales" creadas con malloc()
bucles anidados y descritas erróneamente como matrices multidimensionales son realmente matrices 1-d de punteros a múltiples matrices 1-d. Ver stackoverflow.com/questions/42094465/…
int *ptr = arr;
? Eso lo haría apuntar al inicio (primer elemento de) la matriz, que es equivalente a&arr[0]
.