目录
为什么使用数组(Array)?
一维数组的定义
一维数组的初始化
一维数组元素的访问
一维数组元素的赋值
数组的逻辑存储结构
数组的物理存储结构
二维数组的定义和初始化
为什么使用数组(Array)?
一维数组的定义
一维 数组的定义
int a[10];
定义一个有 10 个 int 型元素的一维数组
– 在内存中分配连续的存储空间给此数组
为什么数组下标从 0 开始?
– 使编译器的实现简化一点,且下标的运算速度少量提高
问题:如果希望下标从 1 到 10 而非从 0 到 9 ,怎么办?
int a[ 11 ];
int a[ n ];
最好用宏定义
# define N 10
int a[ N ];
# define N 11
int a[ N ];
数组的 数据类型 ——每一元素占内存空间的字节数
数组的 存储类型 ——内存的动态、静态存储区或 CPU 的寄存器
一维数组在内存中占用的字节数为:数组长度× sizeof (基类型)
一维数组的初始化
未初始化的数组元素值是什么?
静态 数组和 全局 数组自动初始化为0值,否则,是随机数
一维数组的初始化
int a[5] = {62, 74, 56, 88, 90};
int a[5] = {62, 74}; int a[5] = {62, 74, 0, 0, 0};
int a[ ] = {62, 74, 56, 88, 90};
更高效的数组初始化方法
memset (a, 0, sizeof(a));
• 用 sizeof(a) 来获得数组 a 所占的内存字节数
• #include <string.h>
一维数组元素的访问
int a[5] = {62, 74, 56, 88, 90};
一维数组的引用
数组名[ 下标 ]
允许快速随机访问
引用时下标允许是 int 型变量或表达式
62 74 56 88 a[i]
一维数组元素的赋值
问题:如何使两个数组的值相等?
int a[4] = {1,2,3,4};
int b[4];
b = a;
方法2:通过循环语句赋值
int i;
for (i=0; i<4; i++)
{
b[i] = a[i];
}
方法1:逐个元素赋值
b[0]=a[0];
b[1]=a[1];
b[2]=a[2];
b[3]=a[3];
更高效的数组赋值方法
memcpy (b, a, sizeof(a));
• 数组 a 复制给数组 b
#include <string.h>
数组的逻辑存储结构
一维数组: int a[5];
用一个下标确定元素位置
二维数组 : int b[2][3];
用两个下标确定元素位置
数组的物理存储结构
二维数组的定义和初始化
int a[ ][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 a[ ][4] = {{1,2,3},{4,5},{6}};
int a[3][4] = {{1,2,3,0},{4,5,0,0},{6,0,0,0}};