数组名arr与&arr之间的关系

 

在学习c语言中指针部分的时候,往往会有一个困惑,数组名arr&arr有神马不同?甚至在求一些比较复杂的sizeof时不知道表示的是甚么意思?怎么求的......着实让人头疼(本人也被这个折磨过一段时间,所以深有体会,希望后面来的小伙伴们能够轻松掌握这个小技巧,不走弯路,不被折磨哦!)


 1.什么是arr?

    其实arr简单点上来讲只是一个数组的名字,比如他叫张三,那个人李四一样,没什么特别含义,比如:

int arr[5] = { 1, 2, 3, 4, 5 };

那我也可以这么叫他:

int a[5] = { 1, 2, 3, 4, 5 };

这都不影响,但是透过表面运用到代码里面他的意思就有不同了。

2.arr和&arr

我们说两种特殊情况

第一,当我们运用单目操作符   sizeof   去计算这个数组所占据的内存大小时,arr表示整个数组!!!

第二,&arr表示整个数组的地址。

其余的情况代表首元素地址!!!

下面我用实例来进行说明:下面是我的完整代码。

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int main()
{
	int arr[5] = { 1, 2, 3, 4, 5 };
	int a[5] = { 1, 2, 3, 4, 5 };
	printf("这是int arr[5]\n");
	printf("arr -> %d\n", sizeof(arr));
	printf("arr -> %d\n", arr);
	printf("&arr -> %d\n", &arr);
	printf("arr+1 -> %d\n", arr + 1);
	printf("&arr+1 -> %d\n", &arr + 1);

	printf("********************************\n");

	printf("这是int a[5]\n");
	printf("a -> %d\n", sizeof(a));
	printf("a -> %d\n", a);
	printf("&a -> %d\n", &a);
	printf("a+1 -> %d\n", a + 1);
	printf("&a+1 -> %d\n", &a + 1);
	system("pause");
	return 0;
}

运行结果:

(首先说明我上面所说的数组名是arr还是a,表面意思是一样的,只是一个名字而已,其他的部分我都以arr为例子,所以,兄弟萌不要慌,只要看懂一个其余不就拿捏了吗)

我们接下来要关注的是重点:

(1)我们都知道 int 类型占4个字节,通过sizeof我们求到的大小是4*5=20

(2)为什么    arr -> 15727788   &arr -> 15727788一样呢?

       上面认真看的小伙伴就知道了,arr单独拿出来表示的是首元素的地址,而&arr是整个数组的地址,虽然表示相同,但是含义却差之千里哦!!!没懂的小伙伴也不要急,后面还有解释。

(3)通过(2)我们知道,arr表示首元素地址,那么arr+1就表示第二个元素的地址,所以在首元素地址的基础上加4个字节就是  arr+1 -> 15727792

(4)第二个不懂得小伙伴,看过来啦!

        我们说&arr表示整个数组的地址,那么 &arr+1表示什么呢?其实就是整个数组之后的那个字节呗,按计算来说,一共20个字节,首元素地址是&arr -> 15727788 ,我们给他加上20个字节就是&arr+1 -> 15727808  与实际得到的地址完全一致,说明&arr就表示的是整个数组的地址了。

这也就印证了,我们所说的arr和&arr表示相同的原因了

以上就是arr和&arr之间的联系啦,希望看懂的小伙伴,三连支持一下啦。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 37
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值