A one octet word (eight bits, also known as a byte) can take a value 0-255 as you've found. When you use a byte as an address, you can identify 256 different locations.
A two-octet word (sixteen bits) can take a value 0-65535. When you use that value as an address, like on a Z80 or 6502 processor, you can identify 65536 different locations.
Compilers targeting DOS typically provide macros to manipulate the segment and offset of far pointers. FP_SEG(pointer) provides access to the segment portion, FP_OFF(pointer) to the offset. It's also possible that there's a MK_FP(segment, offset) or FP_CONSTRUCT(segment, offset) macro to combine segment and offset into a pointer.
This discussion in comp.os....
An 8-bit (also called a 1-byte) number, can hold one of 256 distinct values, often an integer between 0 and 255.
When used as an address, an 8-bit or 1-byte number can address up to 256 different values, such as different bytes in memory.