一批具有同名的同属性的数据可组成一个数组;可知数组的特点为:
(1)数组是一组有序数据的集合;
(2)可用数组名与下标唯一确定数组中的元素;
(3)数组中的元素属于同一个数据类型;
一.定义和引用一维数组;
定义一维数组的一般形式:
类型符 数组名 【常量表达式】
注:
(1)在定义数组时,需要指定数组元素的个数,即数组长度;
(2)常量表达式可以包括常量和符号常量,如:int a[3+5] ;但不可使用变量;
(3)若在被调用的函数中(不含主函数)定义数组,其长度可以是变量或非常量表达式;
引用一维数组的表示形式:
数组名【下标】
注:
(1)下标可以是整形变量或整形表达式;
(2)数组元素的下标从0开始;
一维数组的初始化
(1)在定义数组时对全部数组元素赋初值;
int arr[10]={1,2,3,4,5,6}; 数据间用逗号隔开;
(2)可以给一部分元素赋值;
(3)在对全部数组元素赋值时,由于数组元素个数已经确定,可以不指定数组长度;
int arr[]={1,2,3,4};
重点:
不可定义为: int arr[] 或 int arr[0]
例:
char arr1[]=”a,b,c,d,e,f”; //有7个元素,有\0
(打印出 a b c d e f)
char arr2[]={‘a’, ‘b’ ,’c’, ‘d’, ‘e’ ,’f’ } // 有6个元素,没有\0;
(打印出随机值,没有\0)
char *p=”a,b,c,d,e,f”; //把首地址a的地址放入p;
一维数组在内存中存储:数组在内存中是连续存储的;
证明:
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i<sizeof(arr) / sizeof(arr[0]); ++i)
{
printf("&arr[%d] = %p\n", i, &arr[i]);
}
system("pause");
return 0;
}
观察输出的结果,我们可知随着数组下标的增长,元素的地址也在有规律的递增,
二维数组的定义与引用
定义一般形式:
类型说明符 数组名【常量表达式】【常量表达式】
引用:
数组名【下标】【下标】
二维数组的初始化:
(1)分行给二维数组赋初值;
例: int a[3][4]={{1,2,3,4},{5,6,7}.{9,10,11}};
int a[3][4]={{1,2},3,[4,5}}; 是不成立的;应改为:int a[3][4]={{1,2}{3}{4,5}};
(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对个元素赋值;
(3)可以对部分元素赋初值,也可对某几行赋值;
(4)若对全部元素赋值,定义数组时可以对第一维的长度不指定,但第2 维的长度不可省;
二维数组在内存中也是连续存储的,如下图;
int main()
{
int arr[3][4];
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
system("pause");
return 0;
}