Search code examples
cpointersindirection

Purpose of dereferencing a pointer as a parameter in C


I recently came along this line of code:

CustomData_em_free_block(&em->vdata, &eve->data);

And I thought, isn't:

a->b

just syntactic sugar for:

(*a).b

With that in mind, this line could be re-written as:

CustomData_em_free_block(&(*em).vdata, &(*eve).data);

If that's the case, what is the point of passing in

&(*a), as a parameter, and not just a? It seems like the pointer equivalent of -(-a) is being passed in in, is there any logic for this?

Thank you.


Solution

  • This:

    &(*em).vdata
    

    is not the same as this:

    em.vdata
    

    It is the same as this:

    &((*em).vdata)
    

    The ampersand takes the address of vdata, which is a member of the struct pointed to by em. The . operator has higher precedence than the & operator.