一组有个固定大小、相同数据类型的数据的集合。数组
数组能够分为:一维数组、二维数组、三维数组、...(维数不止一维:多维数组)spa
表格 : 行和列(二维数组)指针
类型说明符 数组标识符[常量表达式];内存
类型说明符:数组中全部元素的类型编译器
数组标识符 :数组名,跟变量的命名规则同样。字母、数字、下划线for循环
[]: 下标运算符编译
常量表达式:数组元素的个数,也就是数组的长度。只能是常量,不能是变量。变量
符号常量 #define LENGTH 10循环
经过下标访问获得每一个元素的值。array[0]遍历
有几种方法:
char arr[4] = {'a','b','c','d'};//初始化列表
arr[0]='a',arr[1]='b',arr[2]='c',arr[3]='d'
long arr[6] = {8,45,12,56};
short arr[10] = { 0 };
//遍历
for (int i = 0; i < 6;i++)
{
printf("arr[%d]=%ld\n",i,arr[i]);
}
short arr[] = {1,2,3,4,5,6,7,8};
编译器会根据咱们给定的初始化元素的个数来定义这个数组的长度
数组越界:arr[8],arr[9] 编译器不会报错,
数组名:是一个指针常量,指向这个数组第一个元素的地址,数组的首地址。
char str[12] = "Hello World";//字符常量看作初始化列表
printf("%s\n",str);
char str[11] = {'H','e','l','l','o',' ','W','o','r','l','d'};
str[0] = 'W';
从键盘输入,为每个元素赋值
int arr[5];
scanf("%d",&arr[0]);
scanf("%d", &arr[1]);
scanf("%d", &arr[2]);
scanf("%d", &arr[3]);
scanf("%d", &arr[4]);
for (int i = 0; i < 5;i++)
{
printf("%d,",arr[i]);
}
使用for循环:
int arr[5];
for (int i = 0; i < 5;i++)
{
scanf("%d", &arr[i]);
}
for (int i = 0; i < 5;i++)
{
printf("%d,",arr[i]);
}
/////
int arr[5];
scanf("%d", arr);
一段连续的内存空间
数组所占的内存空间大小 = 数组类型 * 数组的长度;
printf("%d\n",arr);//是一个指针常量,指向这个数组第一个元素的地址,数组的首地址。
//sizeof()
printf("%d\n",sizeof(arr));//整个数组的大小
数组的长度:
sizeof(arr) /sizeof(int);
不可以修改的量,必定要初始化。
const int i=10;
int arr[i];//不行
//const int i = 12;
//char arr[i] = {0};
超过一维的就是多维数组,二维数组、三维数组....
通常形式:
数据类型 数组名[常量表达式1][常量表达式2]
int arr[10];//一位数组
char arr[2][5];//二维数组
float arr[2][3][5];//三维数组
double ar[2][3][4][5];//四维数组
在内存中:一块固定大小、连续的内存空间
char arr[2][5]={0,1,2,3,4,5,6,7,8,9};
int arr[2][2][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
打印一个二维数组
int arr[4][5]={1,2,3,4};
int arr[][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};