【问题标题】:What's the difference when initializing an array declaration with a string literal and a list of distinct characters?使用字符串文字和不同字符列表初始化数组声明时有什么区别?
【发布时间】:2011-05-10 09:32:15
【问题描述】:
char short_string[] = "abc"   
char short_string[] = {'a', 'b', 'c'}   

我认为不同之处在于第二行是一个 switch 语句,它需要用户输入(a b 或 c,因为第一行更像是一个语句......这是对的吗?

【问题讨论】:

  • 不是远程的。你是从哪本书学习 C++ 的?
  • 唯一的区别是第二个没有空终止符......但我第二个无人问津的问题:)
  • I can only repeat myself:获取 C++ 书籍并学习该语言的基础知识。我们不能在这里教你每一个方面。你连最基本的语言理解都没有。
  • im 使用 walter savitch 使用 c++ 解决问题
  • 我建议你先做一些简单的事情,这本书是为专家准备的。

标签: c++


【解决方案1】:

没有。这不是 switch 语句。 这两行都是带有初始化的变量声明。不同的是:

char short_string[] = "abc"

声明 short_string 为空终止的 c-string。
内存转储:0x61, 0x62, 0x63, 0x00
可变长度(以字节为单位):4

而第二行:

char short_string[] = {'a', 'b', 'c'}

将 short_string 声明为字节数组。
内存转储:0x61, 0x62, 0x63
可变长度(以字节为单位):3

【讨论】:

    【解决方案2】:

    第一个语句声明并初始化一个内容为abc(包括终止零)的字符串——这是一个长度为四个字符的字符数组。

    第二条语句声明了一个包含三个字符 abc 的字符数组——它几乎与第一个语句相同,除了没有终止零(不是正确的字符串)。

    另外:C/C++ 中的所有语句都必须以分号结尾。

    【讨论】:

      【解决方案3】:

      不同之处在于第一个选项将分配三个字符和一个尾随 null (x'00') 第二个选项将分配相同的三个字符,但没有尾随 null,如果您尝试使用任何 str.... 系列函数,则会导致问题。

      【讨论】:

        猜你喜欢
        • 2020-07-18
        • 1970-01-01
        • 2015-01-31
        • 2020-05-04
        • 1970-01-01
        • 2011-07-12
        • 2013-10-22
        • 2011-07-24
        • 1970-01-01
        相关资源
        最近更新 更多