C 所有型別的定義

2021-07-10 04:57:28 字數 1854 閱讀 2097

lpstr和lpwstr

是win32

和vc++

所使用的一種字串資料型別。lpstr被定義成是乙個指向以null(『\0』)結尾的32位ansi

字元陣列指標,而lpwstr是乙個指向以null結尾的64位雙

位元組字元陣列指標。lpstr是指指向乙個字串的32位指標,每個字元佔1個位元組。

類似於:(

lpstr 相當於char *)

char charray = 「this is a test」;

char * p = 「this is a test」;

或lpstr p = 「this is a test」;

lpcstr

是win32和vc++所使用的一種

字串資料型別。lpcstr被定義成是乙個指向以null(『\0』)結尾的

常量字元的

指標。lpcstr是指指向乙個常量字串的32位指標,每個字元佔1個位元組。(它與lpstr等同,但不能被其他api函式改變)

類似於:(lpcstr 相當於const char * )

const char* = "yuantianyou ";

lpcstr a = b;

lptstr:

每字元可能佔1位元組或2位元組,取決於unicode是否定義

,所有的

字串都是用tchar來定義的。unicode對應的指標是unsigned   short*也就是lpwstr,為了寫程式方便微軟定義了型別lptstr。(當為unicode時它與lpwstr等同,當為ansi時,它與lpstr等同)。

類似於:(lptstr相等於unsigned short* /lpwstr)

#ifdef _unicode的時候

_t就是l

沒有#ifdef _unicode的時候

_t就是ansi的。

比如lptstr lpstr = new tchar[32];

tchar* szbuf = _t("hello");

lpctstr:

lpctstr是指「long pointer to a constant generic string」,表示「乙個指向一般字串常量的長指標型別」,與c/c++的const char*相對映,而lptstr對映為 char*。

tchar:當我們定義了unicode巨集,就相當於告訴了

編譯器:我準備採用unicode版本。這個時候,tchar就會搖身一變,變成了wchar_t。

typedef wchar_t tchar;

否則,定義為ansi版本。

typedef char tchar;
在mfc中,凡是用char的地方都可以用tchar取代,凡是用char*的地方都可以用lptstr來取代,凡是定義在雙符號中的字串常量(如「helloword」)都可用text巨集重寫。

text(「helloword」);

為支援unicode做準備,除個別必須使用char或char*的地方外,其他地方請依照如下標準:

1.字串型別盡量用cstring    2.字元型別使用tchar    3.字串陣列使用thar    4.字串指標使用tchar* 或 lptstr    5.常量字串指標使用const char* 或lpcstr    6.字串常量和字元常量加巨集 _t

特別的:

1》cstring::format(_t(" ...."),...)//要加_t

2》lptstr等等被多次巢狀定義過的巨集盡量少用,用基礎型別const  char*代替。

C語言型別定義

對於使用者定義型別,typedef和 define有什麼區別?一般來說,最好使用typedef,部分原因是他能正確處理指標型別。例如這些宣告 typedef char string t define string d char string t s1,s2 stirng d s3,s4 s1,s2,...

C 預定義型別

開發工具與關鍵技術 microsoft visual studio 2015 net預定義引用型別是物件和字串。型別物件是所有其它型別的最根本的基礎型別,而型別字串要 用來說明 unicode字串資料。預定義資料型別包括有符號和無符號整數型別 浮點數型別 二進位制 字元和十進位制型別。有符號整數型別...

C 定義函式型別

函式過載和函式指標 int func int a,int b int func int a,int b,int c 1.定義一種函式型別 typedef int my func int int 定義my func的函式型別,返回值是int,引數列表是int 2.定義指向這種函式型別的指標型別 typ...