数组
数组概念
-
数组是含有多个数据值的数据结构,并且每个数据值具有相同的数据类型
-
每个数据被称为元素
-
数据元素在内存中是存储到一片连续的内存中的
-
定义数组
-
int a[10];
-
a为数组名
-
[10]代表数组中可以存放十个元素
-
int 代表数组中元素类型
-
数组中元素类型必须一致
-
数组的初始化
-
定义时赋值,被称为初始化
-
int a[5] = {1,2,3,4,5};
-
从左到右赋值给每个元素
-
-
可以只给部分元素赋值,被称为不完全初始化
-
int a[5] = {1,2};
-
没有被初始化的元素值为0
-
-
完全不初始化
- 数组中的元素值是随机的
-
可以给数组全部元素赋值,不需要定义数组大小
-
int a[]={1,2,3,4,5}
-
给数组赋值超过其容器大小的值会产生越界,其值仍会赋值给数组的下一个内存地址中,可能会破坏别的数据
数组的下标
- 表示对第一个元素的偏移量
- 所以下标从0开始
数组元素的引入
- 数组必须先定义后使用
- C语言规定,只能逐个引用数组元素,不能直接引用整个数组
- 数组下标可以是整型常量或者整型表达式
二维数组
-
数组进行嵌套
-
int a[2][3];
-
一个有两个元素的数组,两个元素是一个有三个元素的数组
字符数组
-
存放字符的数组称为字符数组
char a[10] = {'a','b',....};
-
C语言中没有专门的字符串变量,没有string类型
-
字符串是一系列连续的字符的组合,想要在内存中定位一个字符串,除了要知道他的开头,还有知道他的结尾
- 在C语言中,字符串总是以’\0’结尾,'\0’被称为字符串结束标志,字符串结束符
- ‘’\0’是 ASCII 码表中的第 0 个字符,英文称为 NUL,中文称为“空字符”。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。
- C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到’\0’就认为到达了字符串的末尾,就结束处理。‘\0’至关重要,没有’\0’就意味着永远也到达不了字符串的结尾
- 由" "包围的字符串会自动在末尾添加’\0’。例如,"abc123"从表面看起来只包含了 6 个字符,其实不然,C语言会在最后隐式地添加一个’\0’,这个过程是在后台默默地进行的,所以我们感受不到
-
当用字符数组存储字符串时,要特别注意’\0’,要为’\0’留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1
-
char str[7] = "abc123"; /*2"abc123"看起来只包含了 6 个字符,我们却将 str 的长度定义为 7,就是为了能够容纳最后的'\0'。如果将 str 的长度定义为 6,它就无法容纳'\0'了。*/
-
C语言规定,可以将字符串自己赋值给字符数组
-
char s1[5] = {'a', 'b', 'c', 'd', 'e'}; // s1存放的是字符序列,非字符串 char s2[6] = {'a', 'b', 'c', 'd', 'e', '\0'}; // s2存放了一个字符串 3char s[6] = {"abcde"}; // 使用字符串直接初始化字符数组 char s[6] = "abcde" ; // 大括号可以省略,这种形式更加简洁,实际开发中常用 s[0] = 'A'; // 索引第一个元素,赋值为 'A'7 8//为了方便,你也可以不指定数组长度 char str[] = "www.baidu.com";
-
所谓字符串长度,就是字符串包含了多少个字符(不包括最后的结束符’\0’)。例如"abc"的长度是 3,而不是 4
-
变长数组
-
用变量定义数组长度
-
数组变量的长度必须用常量表达式进行定义。但是在 C99中,有时候也可以使用非常量表达式
-
不可被初始化
- 变量只有在运行时才会被赋值,赋值时才会开辟内存空间
- 但初始化是在编译阶段被处理,变量没有值,无法判断数组大小
-
数组一旦定义完成,其长度不可改变