Q:

Pointers Or Not

This is a academic question, but I think only professional programmers are the people who can answer this.

Is it true that whatever we can do with pointers, we can do without them as well?

This is something one of my undergrad teachers mentioned and I never really cared to find out, now it seems I have to. I and another fellow programmer had a great argument on this and as I am not really qualified enough with C, I lost the argument (he was against the motion).
We are talking about the language C here.

A:

Professional programmer's answer: Anything you can do easily, you can do in a hard way. Sometimes in a very hard way that only masochists would consider. Anything you can do with an excavator you can do with a shovel. Anything you can do with a shovel you can do with a teaspoon. 
Yes, everything you can do with pointers you can do without pointers. Thanks to Gödel, everything that you can do with an array can be done with a huge integer. Just gazillion times more complicated and slower. 
The real question: Why on earth would you do that? 
(Obviously you can hide pointers in a programming language by using other things names like references, arrays etc. Under the hood, you still have pointers. )

A:

You can use a huge byte-array and replace pointers by array indices. Apart from interacting with external code/hardware that expects pointers, this is equivalent to using pointer.
(Though in C indexing into the array is defined through array to pointer degradation, so it technically still involves a pointer)

A:

I don't think you could use the heap (via malloc, or even stack allocation via alloca) without pointers in C as these functions return pointers; so, you'd give up  memory allocation.  Without memory allocation, you're crippled; might as well write in Fortran '66 -- which by the way is all about writing code using compile-time fixed-size arrays, what fun!  (Of course, Fortran doesn't even have structs so you need multiple parallel arrays to do anything useful.)
Now, mind that even arrays in C are treated as pointers as soon as you use them in an expression, such as subscripting/indexing so I'm not sure how you would classify that as to your question; whereas in Fortran, an array is a first-class object that you can use without being considered pointers.
C#, Java (and C++) all have alternatives to pointers (i.e. references) that allow for memory allocation without pointers.

