2015-01-10 258 views
0

我想了解以下代碼:TCHAR指針初始化

const TCHAR * portName = "COM15"; 

我明白,一個TCHAR或者是字符(在ANSI)或WCHAR(以Unicode),基本上是一個1個字節或2字節代表某事的容器。

現在,如果我聲明一個指向const TCHAR的指向portName的指針,那麼portName就是一個指針。當我使用「=」符號時,我給這個指針一個值,對我來說,「COM15」就是地址似乎不合理。我假設這行代碼給了我一個指向「COM15」字符串開始位置的指針,對嗎?

那麼這行代碼中究竟發生了什麼?

正在創建字符串(「COM15」),而「=」符號實際上意味着該字符串的開頭位置正在賦予給portName?

+1

爲了正確地得到這個字面值,請使用'_T()'宏:'const TCHAR * portName = _T(「COM15」);' –

+1

字符串「COM15」存儲在一個只讀位置,並且該位置的地址被返回到你的指針。 – Gopi

+1

請注意,代碼不正確。它應該是'const char *'或'TEXT(「COM15」)'。目前的例子不會編譯爲Unicode。 – MSalters

回答

1

「是否創建了一串字符(」COM15「),而」=「符號實際上意味着該字符串開頭的位置正在賦予給portName?」

是的,正好。但是,除了聽起來像你可能預期的那樣,這是在編譯程序時發生的,而不是在運行時發生。 const關鍵字也禁止在運行時稍後更改該指針。

+0

有道理。我會看看你現在告訴我的_T()。 Ty爲此。 – CodeBlocks

+0

此代碼段中的'const'關鍵字適用於指針,指向數據。指針可以在運行時重新分配。不可變指針的語法是'TCHAR * const'。對於符號常量,通常最好將指針和數據都聲明爲不可變:'const TCHAR * const'。 – IInspectable

1

這個C是如何工作的:

當你說用C char * str1,你是在分配內存的指針。當您編寫str1 = "Hello";時,您正在內存中創建一個字符串字面值,並使指針指向它。

當您創建另一個字符串文字"new string"並將其分配給str1時,您所做的只是更改指針指向的位置。