为什么需要数组
- 为了解决大量同类型数据的存储和使用问题;
-
数组不作为学习重点的原因
数组的遍历和使用非常复杂,一般直接调用别人封装好的数组工具即可。
数组的分类
一维数组
特征
为n个变量连续分配存储空间;
- 所有的变量数据类型必须相同;
- 所有变量所占的字节大小必须相等。
一维数组的使用
```c
初始化 完全初始化 int a[5] = {1,2,3,4,5}; 不完全初始化 —未被初始化的元素默认为零 int a[5] = {1,2,3}; 不初始化 —所有元素都是垃圾值 int a[5]; 清零 int a[5] = {0};
数值间的元素复制 for(int i = 0;i < 5;i++) {
a[i] = b[i];
}
数组名代表的是数组的第一个元素的地址
错误写法 错误1 int a[5]; a[5] = {1,2,3,4,5}; //错误,只有在定义数组的时候,才可以整体赋值,其他情况下整体赋值都是错误的 错误2 int a[5] = {1,2,3,4,5}; a[5] = 100; // 错误,没有a[5]这个元素,最大是a[4]
<a name="IX0uO"></a>
## 二维数组
<a name="aEqxt"></a>
### 二维数组的使用
```c
* 声明
int a[3][4];
* 代表的是:
数组包含了3x4个元素,可以当做3行4列看待,这12个元素的名字依次是:
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[i][j]表示第i+1行第j+1列的元素
int a[m][n]; //该二维数组的最大元素为a[m-1][n-1]
* 初始化
** 初始化形式1
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
** 初始化形式2
int a[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
* 输出二维数组的内容
int a[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int i,j;
// 输出数组内容 --先输出列,再输出行
for(i = 0;i < 3;i++)
{
for(j = 0;j < 4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
多维数组
是否存在多维数组?
不存在,因为内存是线性一维的。
* n维数组可以当做 *每个元素是n-1维数组* 的 *一维数组*
int a[3][4];
该数组是含有3个元素的一维数组,只不过每个元素都可以再分成4个小元素;
int a[3][4][5];
该数组是含有3个元素的一位数组,只不过每个元素都是4行5列的二维数组;