黑马程序员技术交流社区

标题: 有点难度》》 [打印本页]

作者: 魏冬    时间: 2012-11-12 23:06
标题: 有点难度》》
本帖最后由 魏冬 于 2012-11-14 11:28 编辑

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

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

QQ截图20121112230434.png

作者: 杨深    时间: 2012-11-12 23:22
其实没什么难度,无非是把数组元素值翻倍而已。
第一次执行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的元素



作者: 朱勇    时间: 2012-11-13 10:52
楼上正解!
作者: 陈辉    时间: 2012-11-13 12:39
1、首先得明白一点,数组是引用类型,所以ShowArr函数中的数组和Main函数中的数组是用的同一块内存(是在托管堆上分配的),然后将这块内存的地址放入Main函数的
     arr变量和ShowArr函数的arr变量中,因此,ShowArr函数中的数组数组的改变,会导致Main函数中的数组数组的改变

2、当第一次调用ShowArr(arr),使得数组中的元素扩大2倍,此时Main函数中的数组也扩大了2倍,因为他们共用同一个内存。
     当第二次调用ShowArr(arr),此时传入的arr是扩大两倍后的arr
作者: 武江英    时间: 2012-11-14 11:35
我觉得,这是想让你感觉一下调用函数传的参数是数组的地址。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2