The declaration creates x as float (size 2 in 16-bit), p as pointer to float, q as pointer to pointer, r as pointer to pointer to pointer. The expression r dereferences twice to reach the float value, so sizeof(r) returns the size of float itself, which is 2 bytes in a 16-bit machine. The pointer chain doesn't affect the size of the ultimate float type.