Paul brought this little gem to my attention. You'll need to be familiar with C to answer it. (He spent 2 hours fixing a bug which hinged on this issue.) So consider the following snippets of code:
bar = malloc(256*sizeof(int));
foo and bar are functionally equivalent in most ways. You can use foo as a pointer, and you can use bar as an array. C doesn't even do array bounds checking.
One difference between the two is that the memory allocated for foo gets automatically released at the end of the function, whereas you'll have to manually free the memory used by bar.
But when you go about using them, there is another crucial difference. What is it?
Post your answer in the comments. I'll post it myself in a few days if no one gets the answer I have in mind by then. (For the record, when Paul asked me this, I gave him the first difference above, but I couldn't think of the second difference.)