So what's the deal? It seems my professors are just straight up wrong. Do pointers become a problem with large projects? Maybe programming casey-style resolves common points of pointer errors?
Here is the question. What are the true pros / cons of pointers?
I'm going to say some cons of using pointers/pointer arithmetics.
If you make a mistake when you work with pointers, the results are likely to be disastrous, see:
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=buffer+overflow,
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pointer
There are very few things in programming that cause arbitrary code execution all the time, and simple mistakes in pointer arithmetics is one of them.
You have to be perfect not to make such mistakes.
It's really hard to be perfect all the time, and vast majority of programmers are not perfect.
Some C interfaces force you to cast your pointers to "void*", which makes you lose any type safety you had. It's the same with Java, with their generics implementation.
There are compiler optimizations that may be unavailable to you if you choose to use pointer arithmetics. The less constraints you give to compiler, the more space it has for optimizations. Using pointer arithmetics directly is a big constraint.
For example, if you chose to store an int with 1-byte offset off your pointer, the alignment will be wrong, which will slow down your code on some architectures, and the compiler can't help you.
Of course, there are cases when compiler is stupid and it will be better for you to do some bit fiddling, but this does not happen most of the time.