No, C doesn't dereference pointers unless you use *, i.e. you would get the difference between the contents if you did
i = *q - *p;
The reason you don't get 100 is because C takes the size of things pointed to into account. Turbo C is dead ancient so probably ints are 2 bytes, so if you subtract two int* pointers from each other with a difference of 100 bytes you get 50, because you can only store 50 ints in 100 bytes. That's how pointers work. If you want to subtract 100 from 200 and get 100, then use integers.

Do this:
to confirm whether or not ints really are 2 bytes.