定义: 是一个容器,可以用来存储同种数据类型的多个值
特点: 是一段连续的内存空间
注意点: 数组长度省略: 大括号内元素的个数就是数组长度 数组长度未省略: 大括号内元素的个数 <= 数组长度 (未填充的部分填充默认值:整数0、小数0.0 、 字符'\0' 、字符串NULL)
数组的索引: 读取数组内的元素,写修改数组内的元素,都涉及到第几个的问题 --> 索引
数组元素的访问: 定义:一次获取数组中的一个元素
-
读获取数组内的元素 数组名索引 -> 获取完赋值给一个变量或者直接输出打印或者参与运算
-
写修改数组内的元素 数组名索引 直接赋值(arr3 = 5;)
数组退化: int arr\[\] = {1, 2, 3, 4, 5, 6};
-
单写arr表示数组整体的特殊情况:sizeof(arr)
-
与取地址运算符结合:&arr(地址是数组的首地址,步长是数组的总长度) 数组退化:arr(地址是数组的首地址,步长是指针所指向的数据类型)
获取单个数组元素:
int a[] = {1, 2, 3, 4};
a[0];
*a;
a[1];
*(a + 1);
数组长度的计算:int len = sizeof(arr) / sizeof(arr0);
数组遍历的标准格式: 数组遍历的目的是:在循环中依次取出数组里面的元素
for (int i = 索引起始; i < 数组长度 ; i++)
{
//获取arr[i]进行操作; i依次表示数组的索引值
// 获取*arr++进行操作;
}
结构体数组遍历:
typedef struct
{
char name[100];
int age;
} student_t
student_t structArr[] =
{
{"zhangsan", 15},
{"lisi", 17}
}
for(int i = 0; i < 2; i++)
{
//structArr[i]: printf("学生名字为:%s, 学生年龄为:%d\n", structArr[i].name, structArr[i].age);
}
入参数组写法: 数组作为函数的参数进行传递时,实际传递的是数组的首地址
//形式:
int arr[]
int *arrr
函数中遍历数组: 函数入参:数组首地址,数组长度
void PrintArr(int arr[], int len)
{
for(int i = 0; i < len; i++)
{
printf("%d\n", arr[i]);
}
}
void PrintArr(int *arr, int len)
{
for(int i = 0; i < len; i++)
{
printf("%d\n", *arr++);
}
}
二维数组:
-
定义:把很多个小数组,放到一个大数组当中
-
定义格式
数据类型 变量名 [m][n];
m:二维数组长度
n:一维数组长度
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {a, b, c, d, e};
int *arr[] = {arr1, arr2}; //指针数组
- 二维数组的遍历 依次获取二维数组里面的小数组
int arr[3][5] =
{
{1, 2, 3, 4, 5},
{11, 22, 33, 44, 55},
{111, 222, 333, 444, 555}
};
for (int i = 0; i < 3; i++)
{
for(int i = 0; i < 5; i++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}