黑马程序员技术交流社区
标题:
最近遇到一个关于指针的问题,求解
[打印本页]
作者:
whbsspu
时间:
2014-10-22 17:27
标题:
最近遇到一个关于指针的问题,求解
本帖最后由 whbsspu 于 2014-10-22 22:06 编辑
QQ图片20141022171924.jpg
(31.55 KB, 下载次数: 9)
下载附件
2014-10-22 17:20 上传
如图,使用指针将数组元素输出,第8行为什么讲数组arr的首地址转换成(char *)类型的,而不是数组元素的类型(int *)或者不写(char *)或(int *)才能输出正确的结果呢?后两者的情况输出有误。求详细一点的解答。谢谢
作者:
chri_liu
时间:
2014-10-22 17:36
因为当(char*)之后,后面的加i*sizeof(int)表示的是4,8,12.
而如果你不加的话也可以,只需要用arr+i就可以了,因为这里的i指的是加四个字节。
数组名在等号右边时,类型是int *,表示指向数组首元素的指针。第8行等号右边arr的类型是int *,强转为char *,此时仍然指向数组中的元素1, 加上 i * sizeof(int) = 0,也就是让elemAddr指向元素1;第9行就通过解引用指针,取出元素1的值1;然后进行下一次循环,i的值是1,此时elemAddr指向arr偏移1*4=4的元素,也就是说指向元素2,第9行此次循环打印2;同理,第三次循环打印3。其实程序就是利用强转依次取出数组中的所有元素。
作者:
whbsspu
时间:
2014-10-22 17:39
果然是,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2