Teaching pointers (C) to a Java guy
A little Hungarian

As @talhaIrfan says, the problem is mostly syntax. 

This is what I discovered when I was struggling with pointers, while at university. Other students that I introduced the idea to would start to improve shortly after learning this technique. I have also introduced it in professional environments, where the bug rate subsequently reduced.

You can do a lot to improve syntax by introducing a little Hungarian notation (I do not advocate too much of this, just enough).

You need to be consistent, unambiguous, and clear. It should allow you to read your code more easily.

I always use an underscore to separate the Hungarian notation from the rest of the name. I always append type information to the end of the name (this is consistent with what the C libraries do).

I chose a set of symbols


_pt for pointers.
_t for types, this is what the C libraries use.


Examples:

typedef struct samplestructrec *samplestruct_pt_t;
typedef struct samplestructrec  samplestruct_t;
samplestruct_t *samplestruct_pt;


Summary

Always choose good name for you objects, and don't do too much Hungarian. When I was programming in C++, we also had at the beginning of a name p_ for parameters, l_ for local, m_ for a member variable (We did this to avoid name collisions, in retrospect I think that these 3 were not needed. We could have used this. instead of m_). That was it just 5 Hungarian pre/post fixes. You don't need any more, probably less, in a strongly typed language.