En el lenguaje C, sizeof() es un operador que determina el tipo de datos o la longitud de una expresión.
Consejos:
El nombre de la matriz generalmente se refiere a la dirección del primer elemento de la matriz, con dos excepciones:
1. sizeof (nombre de la matriz), donde el nombre de la matriz representa la matriz completa y se calcula el tamaño de la matriz completa
2.&Nombre de la matriz, donde el nombre de la matriz representa la matriz completa y se extrae la dirección de la matriz completa
Veamos el siguiente código:
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(a+0));
printf("%d\n", sizeof(*a));
printf("%d\n", sizeof(a+1));
printf("%d\n", sizeof(a[1]));
printf("%d\n", sizeof(&a));
printf("%d\n", sizeof(*&a));
printf("%d\n", sizeof(&a+1));
printf("%d\n", sizeof(&a[0]));
printf("%d\n", sizeof(&a[0]+1));
Tantos sizeof, ¿cuál es la salida?
primera ola de banderas
Matriz de enteros int a[]={1,2,3,4};
sizeof (a) a es el tamaño de toda la matriz, el tamaño es 4*4=16
sizeof (a+0) a es la dirección del primer elemento, a+0 también es la dirección del primer elemento, el tamaño es 4 u 8
sizeof (*a) a es la dirección del primer elemento, *a es el primer elemento de la matriz, sizeof(*a) es el primer elemento
tamaño, 4
sizeof (a+1) a es la dirección del primer elemento, a+1 es la dirección del segundo elemento de la matriz, el tamaño es 4 u 8
sizeof (a[1])) a[1] calcula el tamaño del segundo elemento, que es 4
sizeof (&a)) &a saca la dirección de la matriz, el tamaño es 4 u 8
sizeof (*&a)) &a saca la dirección de la matriz, elimina la referencia de la dirección de la matriz a la matriz completa, el tamaño es 16
sizeof (&a+1)) &a saca la dirección de la matriz, +1 salta una matriz hacia atrás, considerada como el lugar después del elemento final
dirección, el tamaño es 4 u 8
sizeof (&a[0]) saca la dirección del primer elemento de la matriz, el tamaño es 4 u 8
sizeof (&a[0]+1) saca la dirección del segundo elemento de la matriz, el tamaño es 4 u 8
Segunda ola de banderas
char a[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(a+0));
printf("%d\n", sizeof(*a));
printf("%d\n", sizeof(a[1]));
printf("%d\n", sizeof(&a));
printf("%d\n", sizeof(&a+1));
printf("%d\n", sizeof(&a[0]+1));
Array de caracteres char a[] = {'a','b','c','d','e','f'};
sizeof (a) es el mismo que el anterior, el tamaño es 6
sizeof (a+0) a es la dirección del primer elemento, a+0 también es la dirección del primer elemento, el tamaño es 4 u 8
sizeof (*a) a es la dirección del primer elemento, *a es el primer elemento, es decir, 'a', el tamaño es 1
sizeof (a[1]) a[1] es el segundo elemento de la matriz, que es 'a', y su tamaño es 1
sizeof (&a) &a obtiene la dirección de toda la matriz, el tamaño es 4 u 8
sizeof (&a+1) &a obtiene la dirección de toda la matriz, +1 significa saltar hacia atrás a una ubicación generada por toda la matrizDirección, el tamaño es 4 u 8
sizeof (&a[0]+1) &a[0] representa la dirección del primer elemento, +1 representa la dirección del segundo elemento, tamaño 4 u 8
La primera parte ha terminado, ¡sí!