Думайте о указателе как о числе, только вместо фактического значения, используемого для вычисления, это номер «слота» на карте памяти системы.
Указатель должен быть в состоянии представлять самую высокую позицию карты памяти. То есть он должен иметь как минимум количество байтов, необходимое для представления номера самой высокой позиции.
В 16-битной системе максимально возможная позиция равна 0xFFFF (16-битное число со всеми битами, установленными в 1). Указатель также должен иметь 16 битов, чтобы он мог достичь этого числа.
Обобщая, в X-битной системе указатель будет иметь биты X.
Вы можете сохранить указатель в переменной большего размера, так же, как вы можете сохранить число 1 в char
, int
или unsigned long long
, если хотите; но в этом нет особого смысла: подумайте, точно так же, как более короткий указатель не сможет достичь самой высокой позиции в памяти, более длинный указатель сможет указывать на вещи, которые на самом деле не могут существовать в памяти, так зачем это?
Кроме того, для этого вам придется «обмануть» компилятор. Если вы используете обозначение указателя в своем коде, компилятор всегда будет использовать для него правильное количество байтов. Однако вы можете указать компилятору компилировать для другой платформы.