Извиняюсь, если это основной или глупый вопрос. В чем разница между char*
и LPSTR
. где sizeof
оба дают 4 байта в моем компиляторе. Может кто-нибудь объяснить мне подробно. спасибо..
Разница между char * и LPSTR в окнах
Ответ 1
LPSTR
- это тип Windows, который должен быть одинаковым независимо от того, на какой платформе вы компилировались. Это длинный указатель на строку.
В те дни сегментированной архитектуры (старые сегменты 64K, а не более новая селекторная сегментированная память), где у вас были маленькие, маленькие, средние, большие и огромные модели памяти, важно, чтобы тип Windows всегда был то же самое, независимо от типа указателя char *
.
Итак, если вы выполнили разные компиляторы, в которых базовые типы были разными, заголовочный файл windows.h
определял бы LPSTR
, чтобы компенсировать это.
Например, Borland C может иметь шестнадцатиразрядный char *
и LPSTR
, возможно, для него должен был быть определен как far char *
. В компиляторе, где char *
уже был длинным/дальним указателем, LPSTR
просто использовал бы это.
В настоящее время, с 32-битными плоскими моделями, вероятно, нет настоящих потребностей в таких махинациях, хотя это может случиться с такими вещами, как thunking между 64-битным и 32-битным кодом. Тем не менее, типы, определенные там, все еще с нами и все еще очень используются.
Ответ 2
В основном, указатели LP * должны указывать на использование 32-битного указателя на 16-битных версиях Windows:
От WikiBooks
Буквы "LP" или префикс "lp" означают "Long Pointer", который точно такая же, как обычный указатель на 32-битных машинах. LP данные объекты - это просто устаревшие объекты, перенесенные из Windows 3.1 или более поздней, когда нужно было разграничить указатели и длинные указатели. В современных 32-битных системах эти префиксы можно использовать взаимозаменяемо.
Ответ 3
Разница затухает в глубины времени. LPSTR означает "длинный указатель на строку". Назад перед 32-разрядными процессорами, указатели на память, которые могут находиться в другом сегменте памяти (думаю, далеко в памяти), нуждались в дополнительном пространстве для хранения.
В 32-разрядных (и более поздних) процессорах они точно такие же. Microsoft использует LPSTR исключительно по историческим причинам.