Aquí tengo un puntero ptra una matriz arrde 4 enteros. ptrapunta a toda la matriz. ptr[0]o *ptrapunta 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 ptrcomo un puntero a una matriz completa de cuatro intvalores. 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].