数组定义:
数据类型 数组名[数组元素个数] 如:int array[5];
数组名:表示数组的起始地址值
数据类型:表示数组元素类型,规定元素的空间大小,均匀分配内存.
数组空间大小=元素个数*元素数据类型大小
计算数组元素个数num=sizeof(array)/sizeof(array[0]);
二、静态数组:数组定义完毕,其大小不可改变,起始地址不能变
int array_a[5]={1,2,3,4,5};
//数组内存空间大小:
// int类型,每个元素占四个字节 4*5=20
printf("%d\n",sizeof(array_a));
三、数组地址问题
//数组名是一个变量,表示集合
//输出数组每个元素地址值,可以发现,五个元素的地址分别相差4个字节
printf("%X\n",&array_a[0]);
printf("%X\n",&array_a[1]);
printf("%X\n",&array_a[2]);
printf("%X\n",&array_a[3]);
printf("%X\n",&array_a[4]);
//数组名表示是什么地址?
//数组名表示的数组第一个元素地址
printf("%X\n",array_a);
//&array_a 表示数组一段空间
printf("%X\n",&array_a);
printf("%X\n",array_a+1);//array+1: "1"表示单位,根据array_a 确定单位大小
printf("%X\n",(int)(array_a)+1);//数组起始地址就是整数编码值 (int)(array_a) 弱化成整数 "1"表示数字1
printf("%X\n",&array_a+1);//"1"表示整个数组空间大小
int i;
for(i=0;i<5;i++)
{
//printf("%d\n",array_a[i]);//array[i]表示数组元素值,两种写法,效果一样
printf("%d\n",*(array_a+i));//array+i表示元素地址值
}
int array_a[5];
int array_b[5]={1,2,3,4,5};
//array_a=array_b;//错误,数组名是一个只读变量,不能被赋值
//array[0]=array_b[0];//数组元素可以赋值
//array_a+1=array_b+1;//错误.数组元素地址固定,而且不会分配同一个地址给两个数组,不可以同时使用同一个地址
*(array_a+1)=*(array_b+1);//数组元素赋值
*(array_a)=*(array_b)+1;
四、数组初始化
int array[3]={(2,3,4),(5,6,7)};//array[3]=4,7,0 这里考虑符号优先级以及结合方向逗号是右结合
int array_1[]={1,2,3,45};
int array_2[5]={1,2,3,45};
//int array_3[3]={1,2,3,45};//错误,越界
int array_4[9]={0};//数组元素值都为0