请教一个c语言中数组地址转换的问题?

图片里有错字大概就是源代码输出了最后一个元素,为什么用*符号就可以不用强制转换呢?... 图片里有错字 大概就是源代码输出了最后一个元素,为什么用*符号就可以 不用强制转换呢? 展开
 我来答
microroom
科技发烧友

2021-03-10 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1632万
展开全部
&d是一个指针,它的类型是int (*)[5],即一个指向具有5个int元素的数组的指针。

&d+1是指针的移动,根据&d的类型,这里是向后移动5个int类型的元素。

所以,&d+1就是指向元素5的后面5个元素构成的数组的指针。

而指针&d+1的类型依然是int (*)[5],则*(&d+1)就是这个指针指向的具有5个int元素的数组,即*(&d+1)的类型是int*。

那*(&d+1)-1就是int*型指针后移一个int元素,即*(&d+1)-1就是元素5的地址。

那*(*(&d+1)-1)自然就是元素5了。
追问
&d+1的类型依然是int (*)[5],则*(&d+1)就是这个指针指向的具有5个int元素…

我还是没看懂呀,&d+1的地址不就指向是 数组d最后一个元素 后面的5个int的内存区域开头地址吗? 如果想实现返回最后一个元素地址,不是要转换成int*的指针 再减去1 为什么*(&d+1) 就变成int*类型了?
追答
d的类型是int*,这应该理解吧?
因为*&d=d,所以*&d的类型与d相同也是int*,那自然*(&d+1)的类型也是int*了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式