(一)一维数组
类型名 数组名[正数常量表达式]
(二)区分一级指针和一维数组名
#include <stdio.h>
int main()
{
int arr[5];
int*p = arr;
printf("size of arr : %d\n", sizeof(arr));
printf("size of p : %d\n", sizeof(p));
return 0;
}
结果:
分析结论:
- arr数组名代表整个数组的大小 sizeof(int) * 5 = 20字节,类型为int[5]
- 一级指针p的大小是sizeof(int*) = 4字节
(三)一维数组与函数结合
结合方式就是一维数组是函数的参数列表的一部分
例如:
我们有一个一维数组arr[5],想通过函数ShowArr将数组中的每一元素打印出来
#include <stdio.h>
void ShowArr(int* array, int len)
{
for(int i =0; i < len; i++)
{
printf("%d ", array[0]);
}
printf("\n");
}
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
ShowArr(arr, 5);
return 0;
}
分析:我们为什么使用指针作为形参,并且还要将数组的长度传进来呢?
首先分析 形参arr只是一个int*类型的指针,主函数在传递参数时等价于 int* array = arr ,array指向的其实是arr首先元素的地址(&arr[0]),此时若不传进数组的长度, 我们就不知道该输出多少个元素;
(四)一维数组做函数形参的退化
在(三)中我们已经掌握了指针作为函数形参来访问一维数组的每个元素,下面这种方式int array[]
void ShowArr(int array[], int len)
{
for(int i =0; i < len; i++)
{
printf("%d ", array[0]);
}
printf("\n");
}
此时的形参arr[]就会退化成int*类型的指针
所以该种方式也可以成功将数组的首地址传进函数ShowArr()