黑马程序员技术交流社区

标题: 最近遇到一个关于指针的问题,求解 [打印本页]

作者: whbsspu    时间: 2014-10-22 17:27
标题: 最近遇到一个关于指针的问题,求解
本帖最后由 whbsspu 于 2014-10-22 22:06 编辑


如图,使用指针将数组元素输出,第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