It's a nice tutorial. If you are looking for additional things to put in it, here are some suggestions:
- Be a bit more explicit about the difference of * in a declaration and when used as an operator.
- Discuss some common use cases of pointers; you show some examples, but none of them show the benefit of actually using pointers. I'm thinking that you could discuss:
-- The most common example of pointer usage in all of C, strings!
-- Output parameters on functions
-- Being able to write more generic code, through, say, having 3 different configurations in 3 structs of the same type, then switching between them through a pointer at runtime.
-- How using pointers instead of by-value parameters is more efficient; you should show this with structs though, not arrays.
- Actually I think that using pointer arithmetics instead of array indexing is less clear and should be avoided. There is one common use of pointer arithmetics though: STL-style iterators. Maybe explain how those work?
- char **argv. Or generally, why you sometimes see ** (array of C strings, or returning a pointer as an output parameter.)
- Discuss some of the more common types of program crashes caused by incorrect pointer usage, i.e. show which error leads to which crash, so people recognize the cause more easily.
That's all I can think of at the moment. Also, don't get discouraged by the people hating pointers. You can't avoid them if you're using C, and certainly not if you want to read and understand other people's code. Learning about them is a good thing.