1.数组的概念
数组是一组长度大于0的相同类型的元素的集合,分为一维数组和多为数组,多维数组中最常用的是二维数组。
2.一维数组
(1)一维数组的创建
基本语法:
type arr_name[整形常量值]
形式讲解:
type:是数组所存储的数据类型;
arr_name:数组的名字标识符;
[ ]:[](下标引用操作符)中填写一个整形常量值;
(2)一维数组的初始化
<1>完全初始化
数组中元素的个数与下标相同
int arr[5] = {1,2,3,4,5};
<2>不完全初始化
数组中元素的个数小于下标(位初始化的地方用0补齐)
int arr2[6] = {1};
<3>错误初始化
数组中元素的个数大于下标(越界访问有些编译器不会报错,也要避免这种情况)
int arr3[3] = {1,2,3,4}
(3)数组的数据类型
数组也有类型,数组算是一种自定义类型去掉数组名留下的就是数组的类型。
例如:
int arr1[10];
int arr2[20];
int arr3[5];
arr1[1]的数据类型是int [10]
arr2[2]的数据类型是int [20]
arr3[3]的数据类型是int [30]
(4)一维数组的输入和输出
输入代码:
#include<stdio.h>
int main()
{
int arr[10] = {0};
int i;
for(i=0 ; i<10 ;i++)
{
scanf("%d",&arr[i]);
}
}
输出代码:
#include<stdio.h>
int main()
{
int arr[10] = {0};
int i;
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
}
}
(5)一维数组在内存中的存储
#include<stdio.h>
int main()
{
int arr[10] = {0};
int i;
for(i=0;i<10;i++)
{
printf("%p\n",&arr[i]);//地址用%p打印
}
}
输出结果:
从输出结果来看,随着下标的增加,地址由小到大变化的,并且发现每个元素之间相差4(int型占4个字节)由此不难看出数组在内存中是连续存放的。
3.二维数组
(1)二维数组的概念
把一维数组作为元素的数组,就是二维数组
(2)二维数组的创建
type arr_name[整形常量值][整形常量值]
例如:
int arr[3][5];
char arr2[3][8];
第一个[](下标引用操作符)代表行数
第二个[](下标引用操作符)代表列数
其余参数与一维数组一样
(3)二维数组的初始化
<1>不完全初始化
int arr1[3][5] = {3,9};
<2>完全初始化
int arr1[2][4] = {1,2,3,4,5,6,7,8};
<3>按照行初始化
int arr1[4][4] = {{1,2},{3,4},{5,6},{}};
注:初始化的时候可以省略行,但不能省略列。
(4)二维数组的输入与输出
输入代码
#include<stdio.h>
int main()
{
int i,j;
int arr[2][4] = {0};
for(i=0 ;i<2 ;i++)
{
for(j=0 ;j<4 ;j++)
scanf("%d",&arr[i][j]);
}
}
输出代码
#include<stdio.h>
int main()
{
int i,j;
int arr[2][4]={0};
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
printf("%d",arr[i][j]);
printf("\n");
}
}
(5)二维数组在内存中的存储
#include<stdio.h>
int main()
{
int i,j;
int arr[2][4]={0};
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
printf("%p\n",&arr[i][j]);
printf("\n");
}
}
输出结果
从输出结果来看,每行内部的元素都是相邻的,地址差四个字节,跨行位置的两元素,也相差4个字节,由此可见二维数组在内存中也是连续存储的 。