数组
1数组
引例
• 一个学生的成绩在0~100之间,可以用char表示
• char a = 98;
• 一个班有30个学生,如何表示他们的成绩?
• char a00 = 98;
• char a01 = 95;
• …
• char a29 = 88;
• 一共定义30个变量, a00~a29
引例
• 一个年级有100个学生,如何表示它们的成绩?
• ???
• 使用数组:只需要定义一个变量
• char arr[100];
数组
• char arr[5];
• 数组的元素类型: char
• 数组的名称: arr
• 数组的元素个数: 5
• 意义:相当于N个变量并排在一起
数组的初始化
• 数组定义时可以不初如化,例如,
• char arr[5];
• 数组也可以初始化,例如,
• char arr[5] = {90,91,92,93,94 };
• 也可以只初始化一部分元素:
• char arr[5] = {90,91 };
数组的内存表示
• char arr[5] = {90,91,92,93,94 };
• 在内存中是5个字节,依次值为90,91,92,93,94
数组的使用
• char arr[5] = {90,91,92,93,94 };
• 想知道第1个同学的分数
• char s1 = arr[0];
• 想知道第2个同学的分数
• char s2 = arr[1];
• 注意:在访问数组的元素时,中括号内的下标是 从0开始的,arr[0], arr[1], …, arr[4]
改变数组中元素的值
• char arr[5] = {90,91,92,93,94 };
• arr[0] = 89;
• arr[1] = 88;
• …
• 在VC中观察内存中值的变化。。。
小例子
• char arr[5] = {90,91,92,93,94 };
• 在录入的时候第2个同学和第3个同学的成绩搞反 了,要求改过来。。。。
char s = a[1];
a[1] = a[2];
a[2] = s;
更多数组
• int arr[8] = {1,2,3,4,5,6,7,8}; // 4*8=32
• short arr[100];
• double arr[100];
• float arr[100];
• 注意:元素类型、元素个数、数组名、初始值
2二维数组
一维数组的初始化方法
① char a[5]; // 不给初始值
② char b[5] = {90, 91, 92, 93, 94 }; // 给 全初始值
③ char c[5] = { 90, 91 };// 部分初始化
④ char d[5] = {0}; // 全部为0
⑤ char e[] = {90, 91, 92, 93, 94};
⑥ 注:最后一个元素不要逗号
引例
语文 数学 外语 第1个同学 90 91 92
第2个同学 80 81 82
第3个同学 70 71 72
第4个同学 60 61 62
第5个同学 50 51 52
-
语文
数学
外语
第1个同学
90
91
92
第2个同学
80
81
82
第3个同学
70
71
72
第4个同学
60
61
62
第5个同学
50
51
52
数组
• char arr[15] =
• {
▫ 91, 92, 93, 81, 82, 83, 71, 72, 73,
▫ 61, 62, 63, 51, 52, 53
• };
• 第m位同学的第n门的成绩:
• arr [ m * 3 + n];
• m: 0, 1, 2, 3, 4
• n: 0, 1, 2
二维数组的初始化
• char arr[5][3] =
• {
▫ { 91, 92, 93 }, // 每一行以逗号分隔
▫ { 81, 82, 83 }, // 每一行以逗号分隔
▫ { 71, 72, 73 }, // 每一行以逗号分隔
▫ { 61, 62, 63 }, // 每一行以逗号分隔
▫ { 51, 52, 53 }, // 每一行以逗号分隔
};
二维数组的访问
• 访问元素的方法:
• arr[0][0]; // 第0行第0列
• arr[m][n]; // 第m行第n列
• 注间:下标从0开始
二维数组的访问
• 访问元素的方法:
• arr[0][0]; // 第0行第0列
• arr[m][n]; // 第m行第n列
• 注间:下标从0开始
二维数组的内存视图
• char arr[5][3] =
• {
▫ { 91, 92, 93 }, // 每一行以逗号分隔
▫ { 81, 82, 83 }, // 每一行以逗号分隔
▫ { 71, 72, 73 }, // 每一行以逗号分隔
▫ { 61, 62, 63 }, // 每一行以逗号分隔
▫ { 51, 52, 53 }, // 每一行以逗号分隔
• };
• 二维数组本质上还是一维数组。。。。
二维数组和一维数组的区别
• 本质一样
• char a[15];
• char b[5][3];
• 在内存中都是15个字节
• 表示二维问题,用二维数组会方便一些,不用自 己计算下标了。
小结
• 表示二维问题(表格状数据)用二维数组更方便
• 二维数组和一维数组本质相同
• 一维数组最重要,二维数组或高维数组极少被使 用!