1.用字符串常量初始化,但是不指定长度由编译器计算。
如:
char str4[]="Hello world!";
对于这种赋值方式会自动添加’\0’
2.直接给出字符数组中的各字符
如:
char str1[5]={'a','b','c','d','e'};
3.直接给字符数组赋值,但是不指定长度。
如:
char str2[]={'I','a','m','','f','i','n','e'}
对于2.3两种不会在末尾自动添加’\0’
例题:
char a[]="abcd",*p=a;
printf("%d",*(p+4));
的运行结果为:0
因为*(p+4)=a[4],而本题是用字符串常量初始化,但是不指定长度,及满足1类型,会自动补’\0’,而’\0’的acsii值是0
如果修改成2.3类型
如图:
发现已经越界了,也就是说超出范围,没有补0
最重要的是还不会报错,c语言编译器不会检查数组边界,如果在引用时出现了下标越界,那么编译时不会给出错误提示,只是在运行时出错。