Um... isn't ptr[n] just the same as *(ptr + n) ? In other words, you can use array index syntax as an alternative to pointer arithmetic. You may well end up accidentally looking at invalid memory, but it's legal C++.
@Tomfranky:
So:
1) As MrHutch says, this dereferences the pointer to the vector, and assigns the 6th element to h.
2) This is equivalent to *(Jill_data[5]). In other words, this treats Jill_data as if it were an array of vector<double>, so it accesses the memory at the address given by Jill_data + 5. The statement is still illegal C++, because Jill_data[5] is of type vector<double>, so it can't be dereferenced.
3) Again, this is as MrHutch says.
4) Illegal C++, for similar reasons to 2. Jill_data[5] evaluates to a vector<double>, and this can't be assigned to a double*.