数组定义
声明
声明:数据类型 变量名[元素个数] = { 值 1, 值 2 }
取值:变量名[下标] 下标从 0 开始
c
#include <stdio.h>
int main(void)
{
int arr[5] = { 11, 233, 2, 3, 10};
// 声明数组时开辟的是连续的内存空间,查看数组每一项在内存中的地址,可以发现每一项占 4 个字节
printf("%p\n",&arr[0]);
printf("%p\n",&arr[1]);
printf("%p\n",&arr[2]);
printf("%p\n",&arr[3]);
// 直接输出 arr 就相当于 &arr[0] 的首地址
printf("%p\n",arr);
printf("%d\n",arr == &arr[0]);
// 每项 int 类型占 4 字节
printf("数组在内存种所占大小:%d\n", sizeof arr);
printf("数组元素大小:%d\n", sizeof(arr[0]));
printf("数组的长度:%d\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
声明时长度定义
c
#include <stdio.h>
#define SIZE 10
int main(void)
{
// 声明时确定数组长度
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 不确定长度时需要赋值
int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7};
// 没有初始化的值默认是 0 {0, 1, 2, 0, 0, 0}
int arr2[5] = { 0, 1, 2};
// 没有被赋值时输出是乱码
int arr3[5];
printf("%d",arr3[0]);
// 错误 [i] 元素必须是常量
// int i = 10;
// int arr[i];
// 必须是 #define 定义的常量,const 修饰的不行
int arr[SIZE];
return 0;
}
手动输入
c
#include <stdio.h>
#define SIZE 5
int main(void)
{
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
// 赋值每一项
scanf("%d", &arr[i]);
// 可以输入 1 2 3 4 5 再回车,遇到空格会分割,也可以输入一次回车一次
}
for (int i = 0; i < SIZE; i++)
{
printf("%d", arr[i]);
}
return 0;
}
数组下标越界
c
#include <stdio.h>
int main(void)
{
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// 错误,数组下标越界,如果此处内存可以读取会输出错误的乱码,如果不能读取就会报错
printf("%d", arr[-1]); // err
printf("%d", arr[12]); // err
return 0;
}
二位数组
二位数组在二维游戏中的坐标上有应用
c
#include <stdio.h>
int main(void)
{
// 数据类型 数组名[个数] = { 值1, 值2 }
// 数据类型 数组名[行][列] = {{ 值1, 值2 }, { 值3, 值4 }}
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
arr[0][0] = 10;
printf("二位数组大小:%d\n", sizeof(arr));
printf("二位数组一行大小:%d\n", sizeof(arr[0]));
printf("二位数组元素大小:%d\n", sizeof(arr[0][0]));
printf("二位数组行数:%d\n", sizeof(arr) / sizeof(arr[0]));
printf("二位数组列数:%d\n", sizeof(arr[0]) / sizeof(arr[0][0]));
// 二位数组的首地址
printf("%p\n", arr);
printf("%p\n", arr[0]);
printf("%p\n", &arr[0][0]);
// 声明时行可以省略
int arr1[][3] = {1, 2, 3, 4, 5, 6, 7};
// 相当于 {{1, 2, 3}, {4, 5, 6}, {7,0,0}};
printf("%d\n", arr1[0][1]);
return 0;
}
- 多维数组
c
#include <stdio.h>
int main(void)
{
// 类型 变量名[层][行][列]
int arr[2][3][4] = {
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
},
{
{2, 3, 4, 5},
{6, 7, 8, 9},
{10, 11, 12, 13},
},
};
return 0;
}