【C语言】数组

前言

在C语言中经常要用到数组,数组是一类同类型元素的集合。数组的定义很简单,但在实际应用中数组名在不同的情况下含义不同。


一、数组名是什么?

在我们学习C语言的时候,我们都知道数组名就是数组首元素的地址。

	int arr[10] = { 0 };
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);

运行结果
在这里插入图片描述
这说明数组名就是数组首元素的地址

如果数组名就是数组首元素的地址,那么下面代码的运行结果应该是8(64位的情况下)。

	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));

但实际的运行结果为40并不是8,这说明数组名在某些情况下并不是数组首元素的地址。
在这里插入图片描述

总结:大多数情况下数组名就是数组首元素的地址,以下情况例外

  1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。
  2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组

二、用法

它们在使用方面略有区别

	int arr[10] = { 0 };
	printf("%p\n", arr);
	printf("%p\n", arr + 1);
	printf("%p\n", &arr);
	printf("%p\n", &arr + 1);

运行结果
·在这里插入图片描述

总结

arr与arr+1相差4个字节,这说明arr+1跳过一个元素,而&arr与&arr+1在十六进制下相差28,转换为十进制为40字节,这说明&arr+1跳过整个数组。

三、数组函数的参数进行传参

函数在定义时,形参可以写成两种形式。
1.数组形式
2.指针形式

int arr1[10]= {0};
char ch[3][5] = {0};
test(arr);
test2(ch);

下面这两种形式都可以作为数组传递时函数形参的表示

1.数组表示

void test(int arr[10])//一维数组定义时,可以不指定大小,int arr[]也可以
{
}
void test2(char arr[3][5])//二维数组定义时,可以不指定行,但必须指定列,char arr[][5]也可以

2.指针表示

void test(int *arr)
{
}

总结

数组名是数组首元素的地址,本质上是一种指针,数组作为参数进行传递时,函数的形参形式上可以写成数组的形式,但其本质还是指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值