¿Se necesitan paréntesis para obtener la dirección de un miembro de la estructura de un puntero a la estructura como en “& (s-> var)” vs “& s-> var”?

Tengo una struct str *s ;

Sea var una variable en s . ¿Es &s->var igual a &(s->var) ?

En cuanto al comportamiento, sí, son equivalentes, ya que el operador de acceso -> tiene una precedencia más alta que el operador de dirección & .

En cuanto a la legibilidad, el segundo &(s->var) es mucho más legible que &s->var y debería preferirse a la primera forma. Con la segunda forma, &(s->var) , no tendrá que adivinar qué está haciendo en realidad, ya que la expresión entre paréntesis siempre se evalúa primero. En caso de duda, utilizar paréntesis.

Sí.

(-> tiene una prioridad más alta que &. Consulte http://cppreference.com/wiki/language/operator_precedence )

Sí, porque el operador de desreferenciación del puntero -> tiene mayor prioridad que el operador de dirección & .

  • Precedencia del operador C