Actually no, the C abstract machine is not contiguous. If x and y point inside distinct objects (recursively) not part of the same object, there is no valid c that you can add to x to reach y.
edit: allowing that would prevent even basic optimizations like register allocation.
edit: s/virtual/abstract/