【C语言】深入理解一维数组

(一)一维数组

类型名 数组名[正数常量表达式]

(二)区分一级指针和一维数组名

#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()

猜你喜欢

转载自blog.csdn.net/xiaoxiaoguailou/article/details/121341410
今日推荐