C语言:数组名是什么

在写代码的时候,我们经常用到数组,那么有没有想过数组名是什么呢?当我们需要写一个函数需要调用数组的时候又该如何传参呢?先看一段代码:

#include<stdio.h>

void ARR(int arr[])//int 传参
{
	printf("%d\n", arr[0]);//打印数组下标为‘0’的数,即第一个数
}
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	ARR(arr);//调用函数
	return 0;
}

#include<stdio.h>

void ARR(int* arr[])//int* 传参
{
	printf("%d\n", arr[0]);
}
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	ARR(arr);
	return 0;
}

 

 可见:无论是用整形传参还是用指针传参都是可以的;

为什么呢?

实际上数组名就是一个地址,那为什么int传参也可以呢,编译器这样设计是考虑到对初学者来说更容易理解;

既然数组名就是地址,那么这个地址又是谁的呢?

我们不妨试一下:

#include<stdio.h>

int main()
{
	int arr[5] = { 1,2,3,4,5 };
	printf("%p\n", &arr);
	printf("%p\n", &arr[0]);
	return 0;
}

 哦?数组名原来表示的是第一个元素的地址吗

那么答案就揭晓了(真的吗?)

不妨再看看下面这段代码:

#include<stdio.h>

int main()
{
	int arr[5] = { 1,2,3,4,5 };
	printf("%d\n", sizeof(arr));
	return 0;
}

不对啊,如果数组名是第一个元素的地址的话,那它的大小不应该是4个字节吗,这里怎么是20呢

这里的20其实是全部字符的大小

这种情况下arr就表示了数组里的每一个元素;

还有一种情况就是取地址&arr的时候,这里取的是一整个数组

因此:arr+1代表向后偏移一个元素的大小,&arr+1代表向后偏移一个数组的大小。

综上所述:

一般情况下,数组名就是第一个元素的地址,除了:

1.当用sizeof(数组名)计算数组大小计算的是全部元素

2.&arr取的也是一整个数组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁在夜里看海.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值