- (一)一维数组
- (二)区分一级指针和一维数组名
- (三)一维数组与函数结合
- (四)一维数组做函数形参的退化
类型名 数组名[正数常量表达式]
(二)区分一级指针和一维数组名#includeint main() { int arr[5]; int*p = arr; printf("size of arr : %dn", sizeof(arr)); printf("size of p : %dn", sizeof(p)); return 0; }
结果:
分析结论:
- arr数组名代表整个数组的大小 sizeof(int) * 5 = 20字节,类型为int[5]
- 一级指针p的大小是sizeof(int*) = 4字节
结合方式就是一维数组是函数的参数列表的一部分
例如:
我们有一个一维数组arr[5],想通过函数ShowArr将数组中的每一元素打印出来
#includevoid 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()



