*BLUF: keep practicing with pointers. Read what you can, write test code and see how it works and/or fails, draw diagrams, and read and modify and try to understand other people’s code using pointers and eventually you’ll get it. Well, it took me years way back when.
My first experience with anything resembling a pointer was the 6502 assembly “indirect address” capability on my Commodore Vic 20. While in high school, I drew little boxes on paper and somehow got to a point I could understand what an indirect reference was doing (the Vic 20 assembly language reference explained it tersely, and it took some work to expand it to “knowledge”, along with testing my understanding with short pieces of code). I could even write a simulation of the behavior in BASIC. But that was far from really getting it (Grokking it, I’d call it, having been a Robert A. Heinlein, science fiction writer, fan since about the eighth grade).
My second experience was my first computer science class, the (in?)famous CS211 at Cornell I took at a summer program for HS students. Back then they used Pascal (today, they use Java). We had one lecture on pointers, and that corresponding programming assignment was the only one I didn’t finish. So, I still didn’t get it. Still, it was a fun class. A project I DID finish was making a (not very useful, but introducing most of what was needed for a real compiler, minus optimization, etc.) compiler for the fictional Mark 211 computer having only about 10 assembly commands. (Peter Mark was the name of the professor, and this was CS211, so…)
My third experience was when I got to college for real and took a C class. We spent a lecture or two on pointers, and maybe one assignment using them. I got it working, somehow, but still didn’t get it. I knew, logically, what a pointer did, but that was still not quite “getting it” so that I could think in pointers fluently.
How did I finally get pointers? By getting a job and writing my own, and modifying others’ code, and I mean lots of it, using pointers. I just had to use it in practice, and again, I mean a lot.
That seems the only way. A class can put down the theory of pointers but you have to get experience, try many times, fail many times, before it becomes part of you.
Later, I went through the MIT book (free online somewhere) made for their (in?)famous CS6.037 class, “The Structure And Interpretation of Computer Programs” (that is the title of both the book and the class—in fact, here it is: https://mitpress.mit.edu/sicp/full-text/book/book.html)-- which uses LISP, and while LISP has no pointers, the concept is simulated in Lisp for the class’s and textbook’s purposes. That is a more advanced way of “getting” pointers, and I learned (and have since mostly forgotten) LISP in the process. Incidentally, I think their modern version of that course uses Python, though the textbook might still be the same old LISP one. (There is also a Structure and Interpretation of Mechanics book, or something like that, by at least one of the same authors, which tries to do for Physics what they had done for Computer Science, though it’s not as famous. It might be free online somewhere too.)
Then along came memory-managed languages and…no more pointers! but major games still use non-memory-managed C++ (since generic memory management, while making programming easier, doesn’t let you optimize memory management to the level it is in high-performance games like Unreal). At least it’s not C along with lots of assembly like it used to be. Duke Nukem 3D source code is online somewhere, and it’s mostly in C, but lots of inner-loop code that had to be fast on old slow computers not having a graphics accelerator or a floating point processor, was written in assembly, and I mean, a different assembly program for each possible machine it might be running on…though C is easier to learn to program than C++, just lacks classes and Object Oriented stuff.
*Bottom Line Up Front ; hmm, it occurred to me a footnote is kind of like a pointer.