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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏冬 中级黑马   /  2012-11-12 23:06  /  1530 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 魏冬 于 2012-11-14 11:28 编辑

他的输出结果是多少?在求高手说一下他的运行原理?

QQ截图20121112230434.png (68.53 KB, 下载次数: 43)

QQ截图20121112230434.png

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

4 个回复

倒序浏览
其实没什么难度,无非是把数组元素值翻倍而已。
第一次执行ShowArr(arr),此时arr元素为2,4,6,进入for循环,
for循环(以i=0开始,i<数组长度结束,即将数组每个值遍历一次)内:Console.Write(arr);输出数组的每个值:结果是输出246;(Console.Write为单行直接输出)
arr = arr * 2;数组每个元素的值都乘上2,结果:arr内的元素变为4,8,12(注意只是改变了arr的值,并未输出)
第二次执行ShowArr(arr),此时arr元素为4,8,12进入for循环,
for循环(以i=0开始,i<数组长度结束,即将数组每个值遍历一次)内:Console.Write(arr);输出数组的每个值:结果是输出4812;
两次ShowArr(arr)执行结果是2464812(其实为了方便查看,建议写Console.WriteLine)
如果还不懂的话,可以在 public static void ShowArr(int[] arr)方括号内断点查看两次ShowArr对arr的改变,
在for (int i = 0; i < arr.Length; i++)
断点,查看每次for循环输出的值和改变后的arr的元素


评分

参与人数 2技术分 +2 黑马币 +3 收起 理由
张文 + 2
欧玉斌 + 3 很给力!

查看全部评分

回复 使用道具 举报
楼上正解!
回复 使用道具 举报
1、首先得明白一点,数组是引用类型,所以ShowArr函数中的数组和Main函数中的数组是用的同一块内存(是在托管堆上分配的),然后将这块内存的地址放入Main函数的
     arr变量和ShowArr函数的arr变量中,因此,ShowArr函数中的数组数组的改变,会导致Main函数中的数组数组的改变

2、当第一次调用ShowArr(arr),使得数组中的元素扩大2倍,此时Main函数中的数组也扩大了2倍,因为他们共用同一个内存。
     当第二次调用ShowArr(arr),此时传入的arr是扩大两倍后的arr

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我觉得,这是想让你感觉一下调用函数传的参数是数组的地址。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马