转载自:http://blog.csdn.net/lifeng5055/article/details/8123175
经常被这几种类型搞混淆:PSTR, PWSTR, PTSTR, PCSTR, PCWSTR, PCTSTR, LPSTR, LPWSTR, LPTSTR, LPCSTR, LPCWSTR, LPCTSTR
不过只要明白了每个字母代表什么意思,就很容易区分这种类型了。首先解释一下类型名中几个大写字母所代表的含义:
N:代表near,在16位系统中代表16位的段内地址
L:代表long(far),在16位系统中代表16位的段地址+16位的偏移地址
在32位系统中 N和L已经没有作用,只是为了向前兼容(兼容16位机器)才保留这些定义。
P:代表指针
C:代表CONST(const)
W:代表WCHAR(wchar_t)
T:代表宏_T(一个兼容的宏,用于区分是否定义了UNICODE,如果定义了UNICODE或者_UNICODE,则表示WCHAR,否则表示char)
CH:char的简写
STR:string的简写
排列顺序:[L/N][P][C][W/T][CH/STR]
所以开始提到的几种类型的关系就是:
1, 普通非常量字符串指针:PSTR, PWSTR, PTSTR
if UNICODE is defined
PTSTR = PWSTR
else
PTSTR = PSTR
2,普通常量字符串指针:PCSTR, PCWSTR, PCTSTR
if UNICODE is defined
PCTSTR = PCWSTR
else
PCTSTR = PCSTR
3,长非常量字符串指针:LPSTR, LPWSTR, LPTSTR
if UNICODE is defined
LPTSTR = LPWSTR
else
LPTSTR =LPSTR
4,长常量字符串指针:LPCSTR, LPCWSTR, LPCTSTR
if UNICODE is defined
LPCTSTR = LPCWSTR
else
LPCTSTR = LPCSTR
这样几种类型就很容易区分了