当前位置 博文首页 > CW_qian的博客:7月26日笔记C语言基础数组(基本概念,一维数组
基本概念
// 正常初始化
int?a[5] = {100,200,300,400,500};
int?a[5] = {100,200,300,400,500,600}; // 错误,越界了
int?a[ ] = {100,200,300}; // OK,自动根据初始化列表分配数组元素个数
int?a[5] = {100,200,300}; // OK,只初始化数组元素的一部分
100 | 200 | 300 | 400 | 500 |
数组的真实存储
数组元素的引用
偏移量
<-- 0 | <-- 1 | <-- 2 | <--3 | <--4 |
数组元素
100 | 200 | 300 | 400 | 500 |
元素下标偏移量
int?a[5]; // 有效的下标范围是 0 ~ 4
a[0] = 1;
a[1] = 66;
a[2] = 21;
a[3] = 4;
a[4] = 934;
a[5] = 62; // 错误,越界了
a ???= 10; // 错误,不可对数组名赋值
字符数组
char?s1[5] = {'a', 'b', 'c', 'd', 'e'}; ??????// s1存放的是字符序列,非字符串
char?s2[6] = {'a', 'b', 'c', 'd', 'e', '\0'}; // s2存放了一个字符串
char?s[6] = {"abcde"}; // 使用字符串直接初始化字符数组
char?s[6] = ?"abcde"?; // 大括号可以省略
s[0] = 'A'; // 索引第一个元素,赋值为 'A'
多维数组
// 代码释义:
// 1, a[2] ??是数组的定义,表示该数组拥有两个元素
// 2, int [3]是元素的类型,表示该数组元素是一个具有三个元素的整型数组多维数组的语法跟普通的一维数组语法完全一致
int?a[2][3] = {{1,2,3}, {4,5,6}}; // 数组的元素是另一个数组
int?a[2][3] = {{1,2,3}, {4,5,6}, {7,8,9}}; // 错误,越界了
int?a[2][3] = {{1,2,3}, {4,5,6,7}}; ???????// 错误,越界了
int?a[ ][3] = {{1,2,3}, {4,5,6}}; // OK,自动根据初始化列表分配数组元素个数
int?a[2][3] = {{1,2,3}}; ?????????// OK,只初始化数组元素的一部分
// a[0] 代表第一个元素,这个元素是一个具有 3 个元素的数组:{1,2,3}
// a[1] 代表第二个元素,这个元素也是一个具有 3 个元素的数组:{4,5,6}
printf("%d", a[0][0]); // 输出第一个数组的第一个元素,即1
printf("%d", a[1][2]); // 输出第二个数组的第三个元素,即6
数组万能拆解法
int???a[4]; ??????// 第2部分:a[4]; 第1部分:int
int???b[3][4]; ???// 第2部分:b[3]; 第1部分:int [4]
int???c[2][3][4]; // 第2部分:c[2]; 第1部分:int [3][4]
int??*d[6]; ??????// 第2部分:d[6]; 第1部分:int *
int?(*e[7])(int, float); // 第2部分:e[7]; 第1部分:int (*)(int, float)
数组 :用于存储一组相同类型的数据,称为数组
数组划分
?? ?1.一维数组
?? ?2.二维数组...n维数组
?? ?3.字符数组
?? ?
1.一维数组
?? ?定义格式
?? ??? ?数据类型 ?数组名[整型表达式]
?? ??? ?"数据类型"可以是c语言任意类型
?? ??? ?"数组名":c语言标识符,数组名为该数组的一个首地址(常量)
?? ??? ?"整型表达式":指定数组元素的个数
?? ??? ?eg:
?? ??? ??? ?int a[5];
?? ??? ??? ?
?? ?一维数组初始化
?? ??? ?(1)全部初始化
?? ??? ??? ?int a[5] = {1,2,3,4,5};
?? ??? ??? ?
?? ??? ?(2)对部分元素初始化,后面的元素自动初始化为0?? ?
?? ??? ??? ?int a[5] = {1,2,3};
?? ??? ??? ?int a[5] = {0} // 全部初始化为0,默认为清空数组里面的内容
?? ??? ??? ?
?? ??? ?(3)如果对全部数组元素初始化(赋初始值),那么可以不指定数组的长度
?? ??? ??? ?int a[] = {1,2,3,4,5}
?? ??? ??? ?
?? ?数组在内存中的存放:
?? ??? ?在连续的地址空间,从低地址到高地址一次连续存放数组中的每一个元素
?? ??? ?
?? ?输出数组数据的时候 ?是通过数组名加下标的方式输出比如
?? ??? ?int a[5] = {1,2,3,4,5};
?? ??? ?a[0] = 1;a[1] = 2;a[2] = 3;a[3] = 4;a[4] = 5;
?? ???
2.?? ?二维数组
?? ?int [4]; // 定义一个一维数组 ?
?? ?我们再定义(a)类型的数组b[3];==》int [4] b[3];====》int b[3][4]// 数组b有3个元素,每个元素的类型是 int[4]类型,表示每个元素里面存放4个int类型的数据
?? ?
?? ?int b[3][4];
?? ?新定义的数组b里面有三个元素,每个元素都是int[4]类型
?? ?
?? ?虽然二维数组在内存里面是线性存储的,但是我们使用的时候也可以理解为是一个矩阵,例如int b[3][4] 3行4列
?? ?
?? ?二维数组定义:
?? ??? ?数组类型 数组名[整型表达式][整型表达式];
?? ??? ??? ??? ??? ??? ?多少行 ? ? ? ?多少列
?? ?
?? ?二维数组使用
?? ??? ?按行存放数据
?? ?
?? ?二维数组初始化
?? ??? ?(1)分行给二维数组赋初始值
?? ??? ??? ?int a[2][3] = {{1,2,3},{4,5,6}};
?? ??? ?
?? ??? ?(2)将所有的数据写在一个{}里面,给数组赋值
?? ??? ?int a[2][3] = {1,2,3,4,5,6};
?? ??? ?
?? ??? ?(3)将部分元素初始化后,其余的默认为0
?? ??? ?int a[2][3] = {{1,2},{4,5}}===>a[0][2] == 0 ? a[1][2] == 0
?? ??? ?
?? ??? ?(4)如果对全部元素赋初始值,则定义数组可以对一维数组的长度省略,但是数组类型里面的元素个数不能省略
?? ??? ?int a[][3] = {{1,2,3},{4,5,6}}
?? ??? ?
?? ?二维数组的输出
?? ??? ?数组名[第几行][第几列]
?? ??? ?例如 : int a[2][3] = {{1,2,3},{4,5,6}};
?? ??? ??? ??? ?a[0][0] = 1; // 第0行第0列?
?? ??? ??? ??? ?a[0][1] = 2; // 第0行第1列?
?? ??? ??? ??? ?a[0][2] = 3; // 第0行第2列?
?? ??? ??? ??? ?a[1][0] = 4; // 第1行第0列?
?? ??? ??? ??? ?a[1][1] = 5; // 第1行第1列?
?? ??? ??? ??? ?a[1][2] = 6; // 第1行第2列?
?
cs