数组大小
数组在定义时一般会指定大小,数组大小是指数组最多可存储的元素的个数。例如,定义一个int类型数组arr,该数组最多只能存储5个数据,如果存储数据大于5,编译器会提示“初始项值过多”的错误信息,示例代码如下:
int arr[5] = { 11,46,9,200,87 }; //存储5个数据
int arr[5] = { 2,349,28,34,99,120 }; //错误,存储数据个数超过了数组大小
在上一小节中,定义了字符类型数组carr,如果将数组carr初始化如下形式,编译器就会报错,初始化代码如下:
char carr[5] = { 'a','b',"sft" }; //char类型数组中存储了一个字符串
上述代码中,carr包含了一个有3个字符的字符串,编译器在转换时,将"sft"字符串拆分为's'、'f'、't'、'\0'这4个字符,此时数组中有6个字符,但数组大小为5,因此编译器会报“初始项值过多”的错误。
需要注意的是,数组大小与数组元素个数是不相同的,数组大小是数组最多可存储的元素个数,但数组中存储的元素并不一定是最大数目,例如,有如下数组:
int arr[5] = { 1,2,3 };
上述代码中,数组arr大小为5,但数组元素个数为3。数组元素个数可以是0和不超过数组大小的任意正整数。
数组所占内存的大小由数组类型和数组大小决定,与数组中存储的元素个数无关。对于一个大小为5的int类型数组而言,它所占的内存大小就是这5个元素所占的内存大小,每个元素占4个字节内存,5个元素所占内存大小为4×5=20个字节,数组所占内存大小也就为20个字节。
数组所占内存大小可以使用sizeof运算符计算,示例代码如下:
int arr1[5] = { 11,46,9,200,87 }; //数组arr1存储5个数据
float arr2[5]; //数组arr2未存储数据
char arr3[5] = { 'a','b','c' }; //数组arr3存储3个数据
printf("%d\n", sizeof(arr1)); //数组arr1占内存大小为20
printf("%d\n", sizeof(arr2)); //数组arr2占内存大小为20
printf("%d\n", sizeof(arr3)); //数组arr3占内存大小为5
上述代码中,分别定义了int类型数组arr1、float类型数组arr2、char类型数组arr3,这三个数组大小均为5,使用sizeof运算符计算它们所占内存并输出,则三个数组所占内存分别为20、20、5。