1.基本概念:
逻辑: 一次性定义多个相同类型的变量,并且给他分配一片连续的内存
语法:
int arr [5] ;
初始化:
只有在定义的时候赋值,才可以称为初始化。数组只有在初始化的时候才可以统一赋值。
int arr [5] = {1,2,3,4,5} ; // 定义并初始化数组
int arr [5] = {1,2,3} ; //可以, 不完全初始化
int arr [5] = {1,2,3,4,5,6,7,8,9} ; // 错误(但是可以用),越界初始化,越界部分将会被编译器舍弃。
int arr [ ] = {1,2,3,4,5,6,7,8,9} ; // 可以, 用户没有直接给定数组大小,
// 但是有初始化, 因此数组的大小会在初始化时确定, 大小为 9
int arr [ ] ; // 错误的, 没有给定大小也没有初始化, 因此数组的内存大小无法确定
系统无法分
注意:
数组在定义的时候必须确定他的大小。 说白了就是中括号中[] 必须有数组的大小,如果没有就必须初始化
数组元素引用:
存储模式:一片连续的内存,按照数据的类型进行分割成若干个大小相同的格子
元素的下标与偏移量:以数组开头为基础的偏移的量(数据类型大小)
求数组元素的个数:以上边为例:
int len = sizeof(arr) / sizeof(int)
2.字符数组:
概念:专门用来存放字符类型数据的数组
初始化+引用:
char ch [5] = {'H','e','l','l','l','o'}; //字符数组
char ch1 [5] = {"hello"}; //字符串数组
char ch2 [6] = "hello"; //与ch1一样大括号可以省略
注意:
ch1 为字符数组, 它没有结束符,而字符串数组有结束符,因此在打印输出的时候应该避免使用 %s 进行输出, 有可能会造成越界访问
定义数组时没有初始化会怎么样?
结论:
没有初始化的情况看内存的内容是随机值(内存中原有的内容)
不完全初始化又会怎么样?
int arr[5] = { 1, 2};
结论:不完全初始化 ,已经初始化部分是已知值 , 其它则是0