【问题标题】:Single quotes vs. double quotes in C or C++C 或 C++ 中的单引号与双引号
【发布时间】:2011-04-10 15:52:58
【问题描述】:

在 C 或 C++ 编程中何时应该使用单引号和双引号?

【问题讨论】:

    标签: c++ c syntax char string-literals


    【解决方案1】:

    虽然我确定这不能回答原始提问者的问题,但如果你最终在这里寻找像我一样的文字整数中的单引号......

    C++14 增加了添加 single quotes (') in the middle of number literals 的功能,以便为数字添加一些视觉分组。

    constexpr int oneBillion = 1'000'000'000;
    constexpr int binary = 0b1010'0101;
    constexpr int hex = 0x12'34'5678;
    constexpr double pi = 3.1415926535'8979323846'2643383279'5028841971'6939937510;
    

    【讨论】:

      【解决方案2】:

      在 C 和 C++ 中,单引号称为字符 ('a'),而双引号称为字符串 ("Hello")。不同之处在于,一个字符可以存储任何内容,但只能存储一个字母/数字等。字符串可以存储任何内容。 但也要记住,“1”和 1 之间是有区别的。 如果你输入 cout

      cout<<int('1')<<endl<<int(1);
      

      这次第一行是 48。当你将一个字符转换为 int 时,它会转换为它的 ascii,而 '1' 的 ascii 是 48。 同样,如果你这样做:

      string s="Hi";
      s+=48; //This will add "1" to the string
      s+="1"; This will also add "1" to the string
      

      【讨论】:

        【解决方案3】:

        单引号用于字符,而双引号用于字符串。

        例如...

         printf("%c \n",'a');
         printf("%s","Hello World");
        

        输出

        a  
        Hello World
        

        如果您在反之亦然的情况下使用这些,并且对字符串使用单引号,对字符使用双引号,结果如下:

          printf("%c \n","a");
          printf("%s",'Hello World');
        

        输出:

        对于第一行。你会得到一个垃圾值或意外值,或者你可能会得到这样的输出:

        对于第二个语句,您什么也看不到。还有一件事,如果你在这之后有更多的语句,它们也不会给你任何结果。

        注意:PHP 语言让您可以灵活地轻松使用单引号和双引号。

        【讨论】:

          【解决方案4】:

          在 C 中,'a' 等单引号表示字符常量,而 "a" 是一个字符数组,始终以 \0 字符结尾

          【讨论】:

            【解决方案5】:

            在 C 和 C++ 中,单引号标识单个字符,而双引号创建字符串文字。 'a' 是单个字符文字,而 "a" 是包含 'a' 和空终止符(即 2 字符数组)的字符串文字。

            在 C++ 中,字符文字的类型是 char,但请注意,在 C 中,字符文字的类型是 int,即 sizeof 'a' 在 int 为 32 位的体系结构中为 4(和 CHAR_BIT是 8),而 sizeof(char) 到处都是 1。

            【讨论】:

              【解决方案6】:

              我正在寻找类似的东西: int cc = 'cc';碰巧它基本上是按字节复制到整数。因此,查看它的方法是将基本上是 2 个 c 的“cc”复制到整数 cc 的低 2 个字节。如果您正在寻找琐事,那么

              printf("%d %d", 'c', 'cc'); would give:
              

              99 25443

              那是因为 25443 = 99 + 256*99

              所以'cc'是一个多字符常量,不是一个字符串。

              干杯

              【讨论】:

              • 我没听明白:25443 = 99 + 256*99 为什么是 256*99?
              【解决方案7】:

              一些编译器还实现了允许多字符常量的扩展。 C99 标准说:

              6.4.4.4p10: "一个整数字符常量的值,包含更多 多于一个字符(例如,'ab'),或 包含字符或转义 不映射到 a 的序列 单字节执行字符,是 实现定义。”

              这可能看起来像这样,例如:

              const uint32_t png_ihdr = 'IHDR';
              

              生成的常量(在 GCC 中,它实现了这个)具有通过获取每个字符并将其向上移动获得的值,因此“I”最终位于 32 位值的最高有效位中。显然,如果您正在编写独立于平台的代码,则不应依赖它。

              【讨论】:

              • 谢谢,我刚刚在一些代码中看到了这一点,我的回复只能描述为“WTF”。我已经断断续续地使用 GCC 15 年了,直到现在还没有遇到过这种情况。
              • +1 除了魔术头,通常用于命令行评估。
              【解决方案8】:

              单引号表示字符,双引号表示字符串。

              在Java中也是如此。

              【讨论】:

              • 这并没有真正为问题增加任何价值,因为此信息已包含在其他答案中。
              【解决方案9】:
              • 'x'是一个整数,代表的数值 机器字符集中的字母 x
              • "x" 是一个字符数组,两个字符长, 由‘x’ 后跟‘\0’ 组成

              【讨论】:

                【解决方案10】:
                1. single quote 代表character
                2. double quote 代表string

                【讨论】:

                  【解决方案11】:

                  双引号用于字符串文字,例如:

                  char str[] = "Hello world";
                  

                  单引号用于单字符文字,例如:

                  char c = 'x';
                  

                  编辑正如大卫在另一个答案中所说,字符文字的类型是int

                  【讨论】:

                  • 谢谢。表示字符为 1 字节,末尾没有空字符 '/0' .. 字符串末尾包含空字符。
                  • @mr_eclair:字符串 literal 总是包含一个隐式的空终止符,但要小心。你可以写类似char str[] = {'H','e','l','l','o'}; 的东西,而str 不会有一个空终止符。
                  • 在那种情况下,str 不是字符串(至少不是 C 风格的字符串,它被定义为 NTBS)。
                  • @Steve:明白。我对@mr_eclair 的观点是,并非所有char[](人们通常称之为“字符串”)都是空终止的。
                  • @OliCharlesworth 这 - 幸运的是 - 不是全部真相:这些是由注释分隔的 两个 字符串文字:"hello" /*seamlessly connected to*/ "world"。这对于带注释的多行消息很有意义。
                  【解决方案12】:

                  使用单引号和单字符作为:

                  char ch = 'a';
                  

                  这里'a'是一个char常量,等于char a的ASCII值。

                  在字符串中使用双引号:

                  char str[] = "foo";
                  

                  这里的"foo" 是一个字符串字面量。

                  可以使用"a",但不能使用'foo'

                  【讨论】:

                    【解决方案13】:

                    单引号用于单个字符。双引号用于字符串(字符数组)。如果您愿意,可以使用单引号一次一个字符地构建一个字符串。

                    char myChar     = 'A';
                    char myString[] = "Hello Mum";
                    char myOtherString[] = { 'H','e','l','l','o','\0' };
                    

                    【讨论】:

                      【解决方案14】:

                      单引号是字符 (char),双引号是空终止字符串 (char *)。

                      char c = 'x';
                      char *s = "Hello World";
                      

                      【讨论】:

                      • “hello world”是const char *
                      • @Eiko 你什么时候把 * 放在变量前面,例如上面的 *s?
                      • @CodeGuru 当变量是指针类型时,您使用 *。在这种情况下,'s' 指向一个字符数组。
                      • @OldSchool 在 C++ 中,是的,但在 C 中,不是。在 C 中,它是 char *,而不是 const char *
                      猜你喜欢
                      • 1970-01-01
                      • 2012-05-23
                      • 1970-01-01
                      • 2016-08-31
                      • 2011-09-17
                      • 2012-12-13
                      相关资源
                      最近更新 更多