A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© whbsspu 中级黑马   /  2014-10-22 17:27  /  1211 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 whbsspu 于 2014-10-22 22:06 编辑


如图,使用指针将数组元素输出,第8行为什么讲数组arr的首地址转换成(char *)类型的,而不是数组元素的类型(int *)或者不写(char *)或(int *)才能输出正确的结果呢?后两者的情况输出有误。求详细一点的解答。谢谢

2 个回复

倒序浏览
因为当(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。其实程序就是利用强转依次取出数组中的所有元素。

评分

参与人数 1黑马币 +10 收起 理由
whbsspu + 10 很给力!

查看全部评分

回复 使用道具 举报 1 0
果然是,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马