请教一个c语言中数组地址转换的问题?
1个回答
展开全部
&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是指针的移动,根据&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*了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询