arr

arr,第1张

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]静看电影 共享好时光如果我的答案对您有一点点帮助的话 请关注噢 看到你的支持我会很开心的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/4167959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-26
下一篇 2022-10-26

发表评论

登录后才能评论

评论列表(0条)

保存