【问题标题】:defining a string in C++ with const char *str="Hello"; [duplicate]用 const char *str="Hello" 在 C++ 中定义一个字符串; [复制]
【发布时间】:2021-03-11 04:07:01
【问题描述】:

我在这里有点困惑。在语句const char *str="Hello";中,str是一个指向char变量的指针,指向字符串"Hello"的第一个字符'H',所以str应该包含'H'字符的地址。然而,如果我使用cout<<str,它会打印整个字符串"Hello",而不是地址。

另外,如果我使用cout<<*str 打印存储在str 指向的地址中的值,它会正确打印字符'H'

有人能解释一下这是怎么发生的以及为什么会发生吗?这可能是非常基本的,但解释会帮助我更清楚地理解这些概念。

【问题讨论】:

  • std::cout << static_cast<const void*>(str); 应该做你想做的事。有几个重载的operator<< 用于std::basic_ostream,它们采用char * 的变体,将变量视为c 样式字符串。这样做是因为这是人们期望它做的事情。 en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2
  • C 字符串有一个特定的重载<<,它比void* 的重载更好。

标签: c++ string char-pointer


【解决方案1】:

str 是一个指向 char 变量的指针

示例中没有 char 变量。 str 确实指向一个 char 对象。

有人能解释一下这是怎么发生的吗?

因为二进制运算符<<的左操作数是输出流,右手操作数是指向char的指针被指定打印整个字符串。

如果指向的字符不在包含从该字符开始的空终止符的数组中,则程序的行为将是未定义的。字符串文字以 null 结尾,所以这个例子是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2013-12-23
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    相关资源
    最近更新 更多