#include <iostream>

struct s {
   int n;
};

int main( ) {
   s v = { 5 };
   s& r = v;
   s* p = &v;

   std::cout << v.n << "\n";
   std::cout << r.n << "\n";
   std::cout << (*p).n << "\n";
   std::cout << p->n << "\n";       // equivalente a (*p).n
}

struct t {                          // lo pongo abajo para que no distraiga del ejemplo principal
   int n;

   int suma(int n) {
      return this->n + n;           // this sirve para desambiguar, pero noten también que this es un apuntador (al objeto que invoca a la función miembro)
   }

   void operator=(const t& otro) {
      if (this != &otro) {          // una forma común de detectar que nos estamos queriendo asignar con nosotros mismos
         return;
      }
      //... tal vez hacer algo
   }
};
