I think I'll explain a bit about how pointers work. When you have a char* pointer, each element is one byte, so each time you increment the pointer it goes up by one byte. For a short* pointer, assuming 2 byte shorts, each element is 2 bytes, so each time you increment the pointer it advances two bytes.
This is actually what you want. You want to do this
Code:
short data[] = {1, 2, 3};
printf("%hd\n", *(data + 2));
printf("%hd\n", data[2]);
rather than this.
Code:
short data[] = {1, 2, 3};
printf("%hd\n", *(data + 2 * sizeof(short)));
printf("%hd\n", data[2 * sizeof(short)]);
In other words, remember that a short pointer goes up in 2-byte increments.
(Incidentally, this is also why you can't dereference void pointers. Because the compiler doesn't know how big each element is, it can't calculate *(void_pointer + 1).)