一维数组的创建和初始化
数组的创建
数组是一组相同类型元素的集合。数组的创建方式:
type_t arr_name [const_n]
type_t 是指数组的元素类型
const_n 是一个常量表达式,用来指定数组的大小
数组创建的实例
创建一个数组存放10个整型
正确
int arr[10];
错误
int n = 10;
char ch[n];
数组创建,[ ]中要给一个常量才可以,不能使用变量。
数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
type_t arr_name [const_n]={
表达式1, 表达式2,...,表达式n}
上面是标准的数组的初始化格式,下面我们看几个例子
int arr1[10] = {
1,2,3}; //注释1
int arr2[] = {
1,2,3,4};
int arr3[5] = {
1, 2, 3, 4, 5};
char arr4[3] = {
'a', 98, 'c'}; //注释2
char arr5[] = {
'a', 'b' , 'c'};
char arr6[] = "abcdef"; //注释3
注释1:这种初始化叫不完全初始化,剩下的元素会默认初始化为0
注释2:arr4中虽然第二个元素我们写的是98,但存入内存的依然为abc,98被解析为b,因为b的ASCII值是98。
注释3:双引号引起来的叫字符串,字符串是一种以‘\0’结尾的字符数组。arr6中放入数组有7个字符,因为最后还要加上一个’\0’。字符串可以通过字符型数组来存放。
数组在创建的时候如果不指定数组的确定大小就初始化,数组的元素个数会根据初始化的内容来确定。但是对于下面的代码要区分,在内存中如何分配。
char arr1[] = "abc";
char arr2[3] = {
'a','b','c'};
像arr1这种将字符串"abc"存放在字符型数组的形式,等价于
char arr2[] = {
'a','b','c','\0'};
补充:
sizeof与strlen的区别
char arr6[] = "abcdef";
printf("%d\n", sizeof(arr6));
printf("%d\n", strlen(arr6));
运行结果
解析:
sizeof是计算arr6所占空间的大小,字符串存了7个元素。strlen求字符串长度找到\0就停止,并且\0不算。
- sizeof和strlen没什么关联
- strlen是只能对字符串求长度,只跟字符串有关。
- sizeof计算变量、数组、类型的大小,单位字节。
- strlen是库函数,使用要引用头文件。
- sizeof是操作符,使用不用引用头文件。
不同存储方式sizeof和strlen的值
char arr1[] = "abc";
char arr2[] = {
'a' , 'b' , 'c' };
printf("%d\n", sizeof(arr1));//arr1所占空间大小 abc\0
printf("%d\n", sizeof(arr2));//arr2所占空间大小 abc
printf("%d\n", strlen(arr1)