We need to understand it in the context of far pointer -
Both Far and huge pointers have a size of 4 bytes. They store both the segment and the offset of the address the pointer is referencing.
We cannot change or modify the segment address of given far address by applying any arithmetic operation on it. That is by using arithmetic operator we cannot jump from one segment to other segment.If you will increment the far address beyond the maximum value of its offset address instead of incrementing segment address it will repeat its offset address in cyclic order. See the following example (only applicable to old x86 platform)
int main()
{
char far* f=(char far*)0x0000ffff;
printf("%Fp",f+0x1);
return 0;
}
Output
0x00000000
When a far pointer is incremented or decremented ONLY the offset of the pointer is actually incremented or decremented but in case of huge pointer both segment and offset value will change as the following
int main()
{
char huge* f=(char huge*)0x0000ffff;
printf("%Fp",f+0x1);
return 0;
}
Output
0x00010000