栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 百科 > 学习

arr

学习 更新时间: 发布时间: 百科归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

arr

C语言中数组arr和 &arr对应的地址为什么一样?

这个对我而言太难了!不过查到的是这样的:指针可能不太好理解,举个简单理解的long a =1 和 int a = 1值是一样的指针的&arr的功能就有点像long转为了int。

arr地址是整个数组的地址 &arr是第一个数字的地址两个虽然值相同但含义不同。

操作arr和 &arr带来的结果也是不一样的。

希望对你有帮助!

谢邀静看电影 共享好时光简单说arr本身不是一个指针变量,不像一个指针需要另外的空间存储,所以arr本身用&取地址是没有意义的,或者说是不需要这个意义的,但是为了方便一些情况,规定&arr等于arr,也有觉得是&arr才是地址,arr才是强行规定等于&arr详细说一下arr是数组的开始地址,但是&arr不是地址的地址,&arr也是数组的开始地址它们值相同,类型不同,你的逻辑错在了没有全面理解C的类型系统和隐式转换规律复杂回答:弄懂这个问题需要你了解C的类型系统和隐式转换的规律首先,你要知道什么是隐式转换,这个不解释了然后,C语言是存在数组类型的,对没错是数组类型,而这个类型在大多数情况下会隐式转换为它的元素的指针类型,所以你定义了一个数组int arr[10],arr的类型实际上是int[10],但是因为大部分情况下的隐式转换,arr的类型会退化为int*大部分情况下都会发生隐式转换,不会发生隐式转换的情况有三个,sizeof运算的时候,取地址(&)运算的时候,字符串常量初始化时这也就是为什么sizeof数组是整个数组的长度,不等于sizeof指针,在此我不想讨论C为什么要做这么多隐式转换。

上面说&运算的时候不会发生隐式转换,所以&arr,就是取arr数组的地址,取数组的地址,在这里,既不是数组名的地址,也不是数组首元素的地址,arr就是数组,&arr就是取数组的地址,也就是整个数组在内存中的第一个位置的地址,这个运算结果的类型是数组的指针,也就是int(*)[10]。

arr的值在很多情况下会隐式转换为首元素地址,所以你在问题描述里就认为它就是首元素地址(但其实不是)&arr是数组的地址,碰巧和首元素地址相同但是他们类型不同,一个是int[10]隐式转换成的int*,另一个是int(*)[10]静看电影 共享好时光如果我的答案对您有一点点帮助的话 请关注噢 看到你的支持我会很开心的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/ask/577006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号