前言
当我们有非常多的变量值需要进行存储时,我们就会接触到“数组”这个概念,他可以使用一条C语言语句来申请若干个存储空间来存储若干变量。
数组
(1)数组是一组有序数据的集合。数组中各数据的排列是有一定的规律的,下标代表数据在数组中的序号。
(2)用一个数组名和下标来唯一确定数组中的元素,如a3就代表第3个元素的值。
(3)数组中的每一个元素都属于同一数据类型。不可以把不同类型的数据放在同一个数组中。
数组的定义
一维数组:
定义格式: 类型说明符 数组名 [ 常量表达式 ];
注:类型说明符————即数据类型(int、char、float等等);
数组名——————必须符合标识符的要求
常量表达式————必须为一个确定值
一维数组举例: int a[5];
图形化显示:
0 | 1 | 2 | 3 | 4 |
内存存储模拟显示:
内存地址:0xff6c 0xff70 0xff74 0xff78 0xff8c
0 | 1 | 2 | 3 | 4 |
注意:数组的下标是从“0”开始的。
二维数组:
定义格式: 类型说明符 数组名[常量表达式1][常量表达式2]
常量表达式1————行数
常量表达式2————列数
二维数组举例:int a [3][5];
图形化显示:
0,0 | 0,1 | 0,2 | 0,3 | 0,4 |
1,0 | 1,1 | 1,2 | 1,3 | 1,4 |
2,0 | 2,1 | 2,2 | 2,3 | 2,4 |
内存地址:0xff6c 0xff70 0xff74 0xff78 0xff8c
0,0 | 0,1 | 0,2 | 0,3 | 0,4 |
对应数组: a[0][0] a[0] [1] a[0][2] a[0][3] a[0][4]
数组的初始化
一维数组的初始化:
格式: 类型说明符 数组名[元素个数]={数值对应序列};
例如:
二维数组的初始化:
格式: 类型说明符 数组名[行数][列数]={{第一行数组序列值},{第二行数组序列值},.......{第n行数组序列值}};
提示:可以把二维数组看成一张二维表格的形式来进行填写数值即可,但是需要一行一行的填写(即行优先)。
例如:
注意:空白项直接用“0”来填充数值。
数组的引用
一维数组:
引用的方式————数组名[下标];
例如:
int a[5]={1,2,3,4,5};
如果要引用数组a的第二个元素则————a [1] ,其值为2
二维数组:
引用的方式————数组名[行数][列数];
例如:
int a[2][3]={{1,2,3},{4,5,6}};
如果要引用数组a的第二行,第二列的数组元素则————a[1][1],其值为5
注意:数组的下标以“0”开始!
字符数组
正如其名“字符数组”,字符数组里面存放的数据类型是“字符”,且其具备数组的特征。
字符数组的初始化:
char 数组名 [数组长度]=“数组内容”;
例如:
C | h | i | n | a | \0 | \0 | \0 | \0 | \0 |
- 字符串有效长度用'\0'结束符来判断
- 字符串常量自动加'\0'结束符
- 字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',但按照字符串方式输出结果可能包括非有效字符
- 对字符数组处理常采用字符串处理方式,建议用结束符'\0'
注:在使用字符数组时需要注意“越界”的问题。
程序示例
程序功能:
对两个数组中的数据进行排序,并且按照升序显示
程序源代码:
#include <stdio.h>
int compare(int x, int y);
int main(void)
{
int i1, i2, i3;
int arr1[5] = {1, 4, 5, 8, 9};
int arr2[5] = {2, 3, 6, 7, 10};
int arr3[10];
i1 = i2 = i3 = 0;
while (i1 < 5 && i2 < 5)
{
if (compare(arr1[i1], arr2[i2]))
{
arr3[i3++] = arr1[i1++];
}
else
{
arr3[i3++] = arr2[i2++];
}
}
if (i1 == 5)
{
while (i2 < 5)
{
arr3[i3++] = arr2[i2++];
}
}
else
{
while (i1 < 5)
{
arr3[i3++] = arr2[i2++];
}
}
for (i3 = 0; i3 < 10; i3++)
{
printf("%d ", arr3[i3]);
}
printf("\n");
return 0;
}
int compare(int x, int y)
{
if (x <= y)
{
return 1;
}
else
{
return 0;
}
}
运行结果: