数组的定义——引号问题

113 阅读2分钟

char m={1,2,'c',"abc"};

为什么1不用加单引号: 1 是一个整数值。当整数值被放入一个字符数组中时,会被转换成对应的ASCII值。这里没有使用引号,因为它们是数字,C语言编译器会将它们视为整型常量。

为什么'c'需要加单引号: 'c' 被单引号包围,表示它是一个字符常量。在C语言中,单引号用来定义单个字符。因此,'c' 表示字符 'c' 的ASCII值,它将占据数组中的一个元素。

为什么"abc"需要加双引号: 双引号用于定义字符串常量。字符串常量是由字符组成的序列,通常以空字符(\0)结尾。当你使用双引号初始化字符数组时,编译器会自动在字符串的末尾添加一个空字符,以确保它是一个有效的C字符串。在这个例子中,"abc" 将初始化数组的三个连续元素,分别为字符 'a''b''c',然后数组会自动以空字符结束。

这个数组初始化的结果是:

  • m[0] 将存储字符 'SOH'(ASCII码1)
  • m[1] 将存储字符 'STX'(ASCII码2)
  • m[2] 将存储字符 'c'
  • m[3] 将存储字符 'a'
  • m[4] 将存储字符 'b'
  • m[5] 将存储字符 'c'
  • m[6] 将存储空字符 '\0'(由编译器自动添加)

请注意,由于字符串 "abc" 的存在,数组 m 的大小至少应该是7,以确保有足够的空间存储所有字符和自动添加的空字符。如果数组定义为 char m[7],则可以正确存储所有初始化的元素。如果数组定义得更小,比如 char m[6],则会导致数组越界,这是不安全的。