<P> Comparison and arithmetic on far pointers is problematic: there can be several different segment - offset address pairs pointing to one physical address . </P> <P> For example, in an Intel 8086, as well as in later processors running 16 - bit code, a far pointer has two parts: a 16 - bit segment value and a 16 - bit offset value . A linear address is obtained by shifting the binary segment value four times to the left, and then adding the offset value . Hence the effective address is 20 bits (actually 21 - bit, which led to the address wraparound and the Gate A20). There can be up to 4096 different segment - offset address pairs pointing to one physical address . To compare two far pointers, they must first be converted (normalized) to their 20 - bit linear representation . </P> <P> On C compilers targeting the 8086 processor family, far pointers were declared using a non-standard far qualifier . For example, char far * p; defined a far pointer to a char . The difficulty of normalizing far pointers could be avoided with the non-standard huge qualifier . </P> <P> Example of far pointer: </P>

What is far and near pointers in c