Any pointer size is 2 bytes. (only 16-bit offset)
So,
char *s1 = 2 bytes.
So,
char far *s2; = 4 bytes.
So,
char huge *s3; = 4 bytes.
A far, huge pointer has two parts: a 16-bit segment value and a 16-bit offset value.
Since C is a compiler dependent language, it may give different output in other platforms. The above program works fine in Windows (TurboC), but error in Linux (GCC Compiler).