代码之家  ›  专栏  ›  技术社区  ›  Alex Mcp

在Objective-C中单引号和双引号有什么区别?

  •  2
  • Alex Mcp  · 技术社区  · 14 年前

    我正在做一个书本练习,生成一些随机序列号,下面是我的函数:

    NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c%c",
                                        '0' + random() % 10,
                                        'A' + random() % 26,
                                        '0' + random() % 10,
                                        'A' + random() % 26,
                                        '0' + random() % 10];
    

    它的工作原理和输出如下: 2J6X7 . 但在那之前 0 A 11764ıÒ˜ . 我第一次做错了什么,为什么用单引号来纠正呢?

    5 回复  |  直到 14 年前
        1
  •  12
  •   Adrian    14 年前

    单引号和双引号的区别在于双引号声明字符串,单引号声明单个字符。尝试这样做,您将得到一个语法错误:

    'More than one character'
    

    代码输出一堆随机字符的原因是字符串不像大多数其他数据类型那样是整数,而是指针。这意味着当你打字时 "A string" ,表达式的结果是存储字符的内存位置。这可能在内存中的任何位置,具体取决于启动程序的时间。所以,当你加上 random() 对于字符串,它给了你一个随机的内存地址!该声明相当于英文:

    Store the characters "A" in memory, and then give me the memory
    address a random amount of cells later.
    

    随后的随机单元格数量可能是程序中的任何其他内容。指针被解释为字符(因为 %c ),但它不是故意的,给你看似随机的输出。

        2
  •  3
  •   forwnies    14 年前

    单引号为每个字符(char)提供了一个ASCII表示形式,您可以在其中添加一个数字。双引号提供了一个字符串(char*),向其中添加一个数字实际上没有多大意义。

    我可能错了,但我想至少上半场是对的!

        3
  •  2
  •   Matthew Flaschen    14 年前

        4
  •  1
  •   Vilhelm    14 年前

    用于模数的数字控制在单引号中指定的ASCII字符之后可以显示在最终字符串中的ASCII字符数。看看这张桌子: http://www.asciitable.com/ ,作为ASCII码的参考。

    “0”+random()%10将提供从“0”到“10”的字符

    'A'+random()%26将提供从'A'到'Z'的字符

        5
  •  1
  •   pbernatchez    14 年前

    阿德里安的回答是对的。我只是想澄清一下。

    它为2个字符保留空间,A和nul终止符。 它把代表这两个字符的代码放在那个空间里。

    “A”只返回A的代码值, 与上面第一个存储单元中的值相同。 值的类型为char。