数组初始化中字符问题

!g](

"=600 #left")

img


这个第二个数组是一个字符数组,为什么后面没有\0

因为"xyz" 是字符串
编译器会给最后一个位置加上'\0'
用来表示一个字符串的终止
a初始化相当于 char a[] = {'x','y','z','\0'}
所以a的长度为4

因为b是字符数组,b后面的[]没有给出数组大小,编译器就会根据{}中元素的个数来确定b数组的大小,{}中只有3个字符,那么b的大小就是3。
char a[] = "xyz","xyz"是字符串,字符串默认以\0结尾,所以"xyz"的后面默认有一个不可见字符\0,所以a的大小是4

字符串才是以'\0'结束,后面那个相当于char b = {0x78, 0x79, 0x7A},这样写和int b = {0x78, 0x79, 0x7A}是一样的,只是分配的内存不同,他被当作一个普通数组了,所以不会默认添加'\0'结束