Pointer indirection with care

  

* and . operator

struct rec  
{  
    int i;  
    float f;  
    char c;  
};  
  
int main()  
{  
    struct rec \*p;  
    p=(struct rec \*) malloc (sizeof(struct rec));  
    (\*p).i=10;  

}


To initialise pointer to 10, we have to use parentheses, because . operator has higher precedence than * operator.

  

++ and *

Consider **\*p++**

The postfix “++” operator has higher precedence than prefix “*” operator. Thus, *p++ is same as *(p++); it increments the pointer p, and returns the value which p pointed to before p was incremented. If you want to increment the value pointed to by p, try (*p)++. 


See also