Значение, хранящееся в указателе, является адресом памяти. Если вы работаете в 32-битной системе, этот указатель в память будет иметь длину 32 бита (или четыре байта). Если вы работаете в 64-битной системе, этот указатель в память будет иметь длину 64 бита (или восемь байтов).
Размер данных, содержащих местоположение в памяти, не имеет ничего общего с размером данных, представленных в этом месте в памяти.
Что касается char *
, отличного от double *
, char *
может указывать на любое местоположение, но double *
должен указывать на что-то вдоль восьмибайтовой границы. Большие данные должны быть выровнены в соответствии с правилами процессора, на котором вы работаете. Таким образом, указатели на небольшие данные, как правило, не совместимы с указателями на большие данные (например, вы не должны указывать double *
указатель на char *
адрес); но вы сохраняете путь в другом направлении (например, вы можете указать char *
указатель на double *
адрес).