前言
最近在重新学习c语言,学习中发现之前对数组长度的计算方法模糊不清。因此做个总结。
首先要明白什么是数组。
数组是一组相同类型元素的集合。
因此,要定义一个数组,首先要确定数组内的元素是同一种类型。
1. 数组的创建
首先来看看常用的数组的创建形式
- int型
int arr1 [10] = {0};//定义了元素个数,且给第一个元素赋值为0,则其他元素均为0
通过vs调试中的监视功能,可以看到各个数组的存放结果。
int arr2 [10] = {1, 2, 3, 4, 5};//定义了元素个数,但只给前五个元素赋值,则后五个元素均为0
int arr3 [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定义了元素个数,且给所有元素均赋值
int arr4 [10];//什么都不放,编译器会给数组的每个元素放置随机数。
int arr5[] = {1, 2, 3};//不定义元素个数,给几个元素赋值就有几个元素。
注意:
如果你定义了数组的大小(也就是【】号里面写了数字),但是没有给任何元素赋值,那么这个数组的所有元素都默认为一个随机数!!!如果你定义了数组大小,但只给部分元素赋值,那么剩余元素的值默认为0!!!(见上面arr4和arr5)。
因此常用上面arr1的方式,给int型数组的全部元素设置默认值为0.
- char型
char arr6[] = "abc";//没有定义元素个数,用双引号定义3个字符,末尾数组会自动加上结束标志( )
char arr7 [10] = "abc";//定义10个元素个数,用双引号赋值三个字符串,其余7个元素均自动定义为
char arr8 [10] = {'a', 'b', 'c'};//定义10个元素个数,用大括号和单引号赋值三个字符串,则数组只含有三个字符,剩余7个均为
char arr9 [10] = {'a', 98, '98'};//char定义数组,元素中出现没有用单引号的数字,会根据ascii码输出字符
char arr10[] = {'a', 'b', 'c'};//没有定义元素个数,用大括号定义字符串,数组的元素个数则只有三个,结尾没有数组结束标志( )
注意:
要格外注意举例中arr10和arr6的不同。同样为插入abc三个字符,但是arr6结尾有 ,arr10却没有,这在下一步求解数组长度的时候有相当大的区别!!!
2. 求解数组的长度
求解数组长度往往要用到两个函数,strlen或者sizeof
- strlen求解数组长度
strlen是用来求一个字符串(string)的长度,因此strlen不能用来求int类型的数组长度,只能求char类型的数字长度。
具体代码如下:
char arr6[] = "abc";//没有定义元素个数,用双引号定义3个字符,末尾数组会自动加上结束标志( ) printf("length arr6 = %dn", strlen(arr6)); char arr7 [10] = "abc";//定义10个元素个数,用双引号赋值三个字符串,其余7个元素均自动定义为 printf("length arr7 = %dn", strlen(arr7)); char arr8 [10] = {'a', 'b', 'c'};//定义10个元素个数,用大括号和单引号赋值三个字符串,则数组只含有三个字符,剩余7个均为 printf("length arr8 = %dn", strlen(arr8)); char arr9 [10] = {'a', 98, '98'};//char定义数组,元素中出现没有用单引号的数字,会根据ascii码输出字符 printf("length arr9 = %dn", strlen(arr9)); char arr10 [] = {'a', 'b', 'c'};//没有定义元素个数,用大括号定义字符串,数组的元素个数则只有三个,结尾没有数组结束标志( ) printf("length arr10 = %dn", strlen(arr10));
注意:
1、从arr6和arr7中可以看出,用双引号定义的字符串数组都能正确计算出数组长度。这是因为这两个数组的****末尾都含有结束标志”