The only way I got used to pointer was through roughly a week of practice, practice, practice. Reading almost every resource available. Writing code that used them (wow, I have never seen the compiler shout so much).
Pointers are awesome, once you get the hang of them.
I knew a bit of assembly before I actually started to even look at C/C++ so pointers were a relatively easy concept. Everything is in memory and to access anything you need addresses or you can call them pointers to know what memory you want to access. It's such a simplistic concept I don't really get how so many have trouble with it. Maybe they are just looking at it too abstractly.
I had a good mental model of the memory in a computer and the book I had at the time did a very good explanation of computer memory prior to explaining pointers so I never had to much trouble with pointers.
It would seem that most of the people that have trouble understanding pointers can not relate it to something they do understand.
Pointers are not difficult: they are simply variables which hold a memory address, which is a number. They are different from regular unsigned integers in that their arithmetic rules are different, hence "pointer arithmetic".
What is confusing about pointers is how they are declared and used. Instead of simply using a "pointer" type as in:
you give the type that is pointed to and insert an asterisk in between that and the variable name as in:
This is done to hint what type of data you want to retrieve. It matters because different data has different sizes. If you use the "universal" pointer type void* you will find you need to cast it whenever you want to dereference it.
To make things worse, the asterisk * is reused as the dereference operator. This is probably what confuses people the most.
I never had trouble understanding pointers - it was something where I read the page on this site and had an intuitive understanding of how they worked just from that.
As for new/delete, I started off in an environment where I was basically forced to put those all in one place anyway, so I was often shielded from the problems any other programmers faced with that. It gave me time to learn what the problems were and how to avoid them