一、数组:数组是一组相同类型的元素
int main0501() { //数据类型 + 数组名[元素个数] = { 值 } - 如果数组初始化可以不指定数组元素个数 int arr1[10] = { 0 }; int arr2[] = { 1,3,5,7,9 }; //不完全初始化 - 剩下的两个空间会被默认初始化为0 int arr3[5] = { 1,3,5 }; //c99标准中引用一个概念:变长数组 //支持数组创建的时候,用变量指定大小,但是这个数组不能被初始化 int n = 10; //int arr[n] = { 0 };//err - 由此可见VS2017是不支持c99变长数组的 return 0; }
二、字符串就是一串字符 - 用双引号括起来的一串字符 “hello bit”
int main0502() { //注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容 //三、字符数组 - 字符串使用字符数组存储 char arr[] = "hello";//字符串在结尾的位置隐藏了一个\0的字符 return 0; }
三、易混点
int main0503() { char arr1[] = "abc"; char arr2[] = { 'a','b','c' }; char arr3[] = { 'a','b','c','\0' };//这样就等同于arr1 //arr1、arr2、arr3的输出结果是什么? printf("%s\n", arr1); printf("%s\n", arr2); printf("%s\n", arr3); //结果 arr1 - abc // arr2 - abc烫烫烫烫蘟bc // arr3 - abc //事实上在内存中arr1 - a b c \0 // arr2 - a b c // arr3 - a b c //之前有提到\0是字符串的结束标志:在打印arr1时遇到\0时停止打印;而arr2没有\0,则会继续往下找\0,所以输出了一些乱码 //arr1/arr2两种类型字符串的大小及长度 //sizeof - 1个字符=1个字节 printf("%d\n", sizeof(arr1));//4 printf("%d\n", sizeof(arr2));//3 //sizeof在计算字符串元素所占内存大小时是包括\0的,且不是以\0为结束标志的,而是以元素个数为标志 //strlen - 计算字符串长度 - 头文件string.h printf("%d\n", strlen(arr1));//3 printf("%d\n", strlen(arr2));//15 //strlen在计算字符串长度时是以\0为结束标志的,且不包括\0;而arr2没有\0,所以它的结果是一个随机数 return 0; }