数组初始化
#include<stdio.h>
#include<string.h>
int main (int argc,char **argv)
{
int str[] = {1,2,3,4};
int str1[5] = {1,2,3,4};
char str2[5] = "hell";
char str3[5] = {'h','e','l','l'};
char str4[] = "hell";
/* int 类型 */
printf("%d\n",*(str + 4)); //发生数组越界,现在的值即为垃圾数据
printf("%d\n",*(str1 + 4)); //编译器会优化,将第5个位置0
printf("%d\n",sizeof(str)); //大小为4*4
printf("%d\n",sizeof(str1)); // 大小为4*5
/* char类型 */
printf("%d\n",*(str2 + 4)); //这种定义时手工申请的大小,当数据没有
printf("%d\n",*(str3 + 4 ));//填满时,编译器会自动填字符'\0' = (ascll码)0
printf("%c\n",*(str4 + 5)); //同样数组越界,指向垃圾数据
//printf(“%d”,*(str4+4)); //就会是个 0 ,因为编译器会优化最后给个’\0’
printf("%d\n",strlen(str2)); //strlen 是统计字符个数的,不计'\0'的个数
printf("%d\n",strlen(str3)); //同上
printf("%d\n",strlen(str4)); //按理是求不出长度的,因为遇'\0'则止,然而
//后面并不是'\0'
return 0;
}
注:1. 数组是遇’\0’则止。
2. 看初始化的[]里边有无大小
3. ‘\0’ = 0 然而不等于字符’0’ 因为’\0’是转义字符,ascll码是十进制0
而’0’是普通字符 ,ascll码是48
4. Strlen函数 是求字符的,不计算’\0’的大小,sizeof关键字求大小,要注意是否’\0’