【问题标题】:TCHAR pointer initializationTCHAR 指针初始化
【发布时间】:2015-01-10 19:25:40
【问题描述】:

我正在尝试理解以下代码:

const TCHAR * portName = "COM15";

我知道 TCHAR 是 Char(ANSI 格式)或 wChar(Unicode 格式),基本上是一个 1 字节或 2 字节的容器来表示某些东西。

现在,如果我声明一个指向名为 portName 的 const TCHAR 的指针,那么 portName 就是一个指针。当我使用“=”符号时,我给该指针一个值,对我来说,“COM15”将是地址似乎是不合理的。我假设那行代码给了我一个指向“COM15”字符串开头位置的指针,对吗?

那么那行代码中到底发生了什么?

是否正在创建一个字符串(“COM15”),并且“=”符号实际上意味着该字符串的开头位置正在提供给 portName?

【问题讨论】:

  • 要正确获取此文字,请使用_T() 宏:const TCHAR * portName = _T("COM15");
  • 字符串“COM15”存储在只读位置,该位置的地址返回给您的指针。
  • 注意代码不正确。它应该是const char*TEXT("COM15")。当前示例不会编译为 Unicode。

标签: c++ c string pointers tchar


【解决方案1】:

“是否正在创建一个字符串(“COM15”),而“=”符号实际上意味着该字符串的开头位置被赋予了 portName?”

是的,没错。但是,除了您可能预期的问题之外,这发生在程序编译时,而不是在运行时。此外,const 关键字禁止稍后在运行时更改该指针。

【讨论】:

  • 有道理。我也会看看你现在告诉我的 _T() 。泰为那个。
  • 这段代码中的const关键字sn-p适用于pointee,即指向的数据。可以在运行时重新分配指针。不可变指针的语法是TCHAR* const。对于符号常量,通常最好将指针和指向的数据都声明为不可变:const TCHAR* const.
【解决方案2】:

C 的工作原理如下:

当你在 C 中说char * str1 时,你是在内存中分配一个指针。当您编写str1 = "Hello"; 时,您正在内存中创建一个字符串文字并让指针指向它。

当您创建另一个字符串文字 "new string" 并将其分配给 str1 时,您所做的只是更改指针指向的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2011-04-10
    • 2012-11-10
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多