sizeof
obras con tipos y expresiones . Cuando lo aplica a un tipo, el ()
forma parte de la sintaxis sizeof
: sizeof(type)
. Cuando lo aplica a una expresión ()
no son parte de la sintaxis sizeof
: sizeof expression
.
Por lo tanto, su segundo sizeof
realmente no se "aplica a una variable". Se aplica a una expresión (f)
. Esa expresión consiste en una sola variable f
encerrada en un par redundante de ()
. También podría hacerlo sin ese par redundante de ()
y usar solo sizeof f
.
Cuando se aplica sizeof
a una expresión, devuelve el tamaño del resultado de la expresión (es decir, el tamaño del tipo que tiene esa expresión). En su ejemplo, se garantiza que ambas aplicaciones de sizeof
evalúan con el mismo valor.
De hecho, una buena práctica de programación es evitar el sizeof(type)
tanto como sea posible, es decir, prefiera usar sizeof expression
. Esto hace que tu código sea más independiente del tipo de letra, lo que siempre es bueno. Los nombres de tipos pertenecen a declaraciones y en ningún otro lugar.
¿Probaste googlear "sizeof applied to variable"? Los primeros dos resultados (uno de los cuales es de StackOverflow) podrían haber respondido a su pregunta. –
Sí, ambas expresiones 'sizeof' devuelven el mismo valor. Tenga en cuenta que el segundo no requiere paréntesis; 'sizeof' es un operador, no una función. Pero '% u' requiere un argumento de tipo' unsigned int', not 'size_t'. Escribe esto: 'printf ("% zu% zu \ n ", sizeof (struct foo), sizeof f);' o esto: 'printf ("% lu% lu \ n ", (unsigned long) sizeof (struct foo) , (unsigned long) sizeof f); '. '% zu' es una característica específica de C99; la migración de 'printf' de su sistema no lo admite. –