C';s空字符,参考“的Ex.9”;“艰苦学习C”;

C';s空字符,参考“的Ex.9”;“艰苦学习C”;,c,arrays,string,C,Arrays,String,我正在努力学习C的Ex.9: 我有几个问题: 当字符名是逐字符指定的(在“//setup the name”注释下)时,为什么必须手动输入空字符,而在使用方法char*other=“Zed”时则不能?我们为什么不输入char*other=“Zed\0” 关于注释“//first”下的代码,请将它们原样打印出来”——他说整数数组和数字数组在第一个字符后都用0填充(因为每个数组只指定一个字符)。那么,为什么当他打印这些数组时,整数数组显示0,而字符数组只显示一个单独的a,而不是0 当他设置数字数组时

我正在努力学习C的Ex.9:

我有几个问题:

  • 当字符名是逐字符指定的(在“//setup the name”注释下)时,为什么必须手动输入空字符,而在使用方法char*other=“Zed”时则不能?我们为什么不输入char*other=“Zed\0”

  • 关于注释“//first”下的代码,请将它们原样打印出来”——他说整数数组和数字数组在第一个字符后都用0填充(因为每个数组只指定一个字符)。那么,为什么当他打印这些数组时,整数数组显示0,而字符数组只显示一个单独的a,而不是0

  • 当他设置数字数组时,为什么不需要像在名称数组中那样包含空字符呢

  • 先谢谢你

  • 字符数组可能不是字符串(后面有一个\0),而是一个用双引号括起来的字符序列(因此编译器知道在末尾添加\0)
  • 因为表示字符串结尾的\0的ascii值为0
  • 因为它不是字符串,所以它是
    int
    s的数组
  • 因为当将字符串声明为字符串时,编译器会自动将终止NUL添加到数组中。另一个变体是“声明一个字符数组”->请参见第(3)点,如果要将终止符用作字符串,则必须手动指定终止符
  • 要么是因为字符NUL不可打印,要么是因为您将其打印为字符串(以第一个NUL结尾,并停止以显示更多字符)
  • 因为数字数组(
    int arrayname[count of elements]
    )不需要终止符,所以程序员必须采取措施避免访问数组超出范围
  • 默认情况下,C中的字符串以\0结尾。使用“”生成的任何内容都将以\0结尾。默认情况下,数组初始值设定项不以\0结尾
  • “Hi”与{'H','i','\0'}相同

  • 当计算机在终端中打印字符串时,它需要知道字符串何时结束。这可以通过告诉计算机字符串的长度来实现,也可以通过告诉计算机字符串到达某个字符时停止。\0字符实际上只是一个普通的0,可以放入字符串中,而0恰好是字符串停止指示符C中的r

  • 访问数字数组时,您已经知道它的长度,并要求它打印您知道存在的元素。如果您要求计算机处理元素数组,而不是特定元素,则计算机需要识别某个停止编号,或者知道数组的长度


  • 字符串literal
    “a”
    表示字符数组
    {'a','\0'}
    。如果你有三个问题,你能问三个问题吗?也要以一种不依赖版权作品的方式重新组织它们。在StackOverflow上,如果问题中出现被评论的源代码,则最好是这样,但可能不允许将此源代码复制并粘贴到此处用于商业作品。请尝试将其放入“用你自己的话来说"每个问题问一个问题。这个问题似乎离题了,因为它不包含相关的内联代码。对不起,我以后会记住这一点。没有字符
    NULL
    ,这是空指针常量。你可能是说
    NUL
    ?Sry,是的,我做了-更新。什么是数组文字?文字I这是一个写入程序代码的值。数组文字是在代码中编写的数组,例如
    int xs[]={1,2,3}
    ;文字部分是{1,2,3}部分.Sry,但这是错误的。您可能需要阅读一些标准来(取消)混淆术语。C没有数组文字。
    {1,2,3}
    是由整型常量的初始值设定项列表组成的初始值设定项。@伊曼纽尔:这被称为“数组初始值设定项”。数组文字可能与复合文字混淆(例如,C99/C11中的任意无意义数组)。谢谢,让我检查一下我是否真正理解(2)。您的意思是,int数组在打印时的结果为0,因为0被视为整数(与字符串相反,因此不以0结尾),但char数组在打印时被解释为字符串,因此前一个0将其终止,结果仅为“a”?@intelli78:这就是为什么
    name
    显示为一个
    a
    。正如St0fF所说,之所以
    name每个
    只显示一个
    a
    ,是因为NUL(ascii值为0的字符)不可打印。