# Thread: why use the -> operator?

1. ## why use the -> operator?

I was just wondering why, when using object pointers, you must use the -> operatior. Why couldnīt you simply follow the standard method like: *p.funct() if you were accesing the funct() member through the *p pointer?

Thanks for the help

2. sure, you can do that - but because of operator precedence you'll need to put a parenthesis around the pointer dereference, ie: (*p).funct()

3. And it's a lot easier to just write -> than to write all the parentheses and *'s, let alone site there and figure out where they're all supposed to go.

4. Hello,

For example sake, let's create a structure called point:
Code:
struct point {
int x;
int y;
};
The following declaration says that p is a pointer to a structure of type struct point. If p points to a point structure, *p is the structure, and (*p).x and (*p).y are the members:
Code:
struct point *p;
To use p, we might write, for example:
Code:
struct point *p;

printf("(%d %d)\n", (*p).x, (*p).y);
The parenthesis are necessary in (*p).x because the precedence of the structure member operator (.) is higher than (*). The expression *p.x means *(p).x, which is illegal here because (x) is not a pointer.

Pointers to structures are so frequently used that an alternative notation is provided as a shorthand. If (p) is a pointer to a structure, then the following code refers to the particular member:
(p)->member-of-structure

Note: Both (.) and (->) associate from left to right.

Edit: Takes me forever to post. Heh.

- Stack Overflow

5. Also, when you get into operator overloading, * and -> often will not mean "dereference" any more; rather, they will mean "dereference one of my member variables", in which case I personally find -> to be more intuitive - though I imagine that's totally up to you.