¿Cuál es el valor devuelto por sizeof?
Si la expresión es una variable o constante, se pueden omitir los paréntesis. De lo contrario, los resultados con y sin paréntesis son diferentes. Devuelve el número de bytes asignados para la expresión.
En este ejemplo, s es una matriz de caracteres y sizeof(s) devuelve 6, lo que significa que se asignan 6 bytes para varios grupos. Tu comprensión es correcta.
En sizeof(s+2), el resultado de s+2 es un int largo sin signo. sizeof devuelve el número de bytes asignados para almacenar este tipo de entero en su sistema. El centro es 8.
Es decir, el valor devuelto por sizeof (expresión) está relacionado con el tipo del resultado de la expresión. El tipo del valor devuelto por sizeof en sí es unsigned long int.
Por ejemplo:
Supongamos que en un sistema, int tiene 4 bytes, long int tiene 4 bytes, long long int tiene 8 bytes, float tiene 4 bytes y double es 8 bytes. Entonces sizeof(1) devuelve 4, sizeof(1L) devuelve 8 y sizeof(1LL) devuelve 8. Al mismo tiempo, sizeof(1+2) devuelve 4, sizeof(1.2) devuelve 8 y sizeof(1.0F+2) devuelve 4.
El siguiente es un ejemplo completo:
# include & ltstdio.h & gt
int main()
{ p>
int a = 1;
Estructura ss
{
int I;
char s[8];
} s 1;
typedef ss
printf("%lu", tamaño de a); %lu ", tamaño de 1);
printf("%lu ", tamaño de(a+1));
printf("%lu ", tamaño de a+1);
printf("%lu", tamaño de(1+2));
printf("%lu", tamaño de 1+2); ("%lu ", tamaño de(1));
printf("%lu ", tamaño de s 1);
printf("%lu\n ", tamaño de(s ));
printf("%lu ",tamañode((corto)1));
printf("%lu ",tamañode(1L));
printf("%lu ", tamaño de 1LL);
printf("%lu ", tamaño de 1.0
printf("%lu ", tamaño de(1.0F); ));
printf("%lu ", tamaño de 1.0d
printf("%lu ", tamaño de (1.2)); >printf("%lu ", tamaño de(1.0F+2));
printf("%lu\n ", tamaño de(1.0d+2));
Regresar 0;
}