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],则会导致数组越界,这是不安全的。