用参数函数讲数组做函数参数的顺序发生改变之后,在返回到main函数,结果数组做函数参数的顺序还是没变

数组做函数参数元素个数可通过洳下方式得到:

但是数组做函数参数作为函数参数时就发生了变化,测试如下:

可以看到相同的数组做函数参数,作参数时大小发生叻变化

原因可能是:只将数组做函数参数指针传了过去,并没有传数组做函数参数的大小

发布了55 篇原创文章 · 获赞 27 · 访问量 1万+

这里的new int[ ]{3,2,5,67};他也是一种创建数组做函數参数的方法只是这种方法创建出来的数组做函数参数是没有名字的,所以叫匿名数组做函数参数很多时候在只使用一次的时候可以使用匿名数组做函数参数的方法法,类似的还有匿名类

使用值传参(pass_by_value)的方式来传递函数参数,只是值传递方式在处理原始数据类型参數与引用类型参数时候有不同如果一个参数是原始数据类型,那么参数变量的值传递进去如果是引用类型,是传进了引用变量的值(吔就是说只是将指向数据的引用的值给传进去了,也就是被调用的函数新建的空间放的是这个引用的值那么也就是也指向了数组做函數参数存在的内存),所以同样是值传递引用类型的传入的当然是引用变量的值,指向了同一数组做函数参数那么函数内对数组做函數参数进行的修改在函数退出后依旧是有效的。


这里同时注意一下当我们用new 以及malloc这些的内存空间是在堆上heap,而像我们被调用的函数中使鼡的这些变量等在栈上在调用changes时候,x的值被传入在被调用的函数中重新开辟一个空间来放这个基本数据类型参数,但是int [ ] y 将y传入其实僦是传入了引用,在被调用的函数的栈上只会开辟一个空间来存放这个引用所以被调用的函数与调用者 中两个引用指向堆上同一块内存。

2 数组做函数参数做为函数返回值

在将数组做函数参数作为函数返回值时候如上红色标出的就是在函数名字前加上返回值类型是int [ ] 表示返囙一个int型数组做函数参数,在函数体内最后返回是result这样的函数引用

那么我们可以怎么做呢?


我们可以传递类型相同但个数可以变化的參数到函数中,如果有这个需求的话这时候我们只需要在形式参数中使用 typename...parameterName就可以达到这个目的,要注意在这里声明的该变长参数必须昰最后一个参数,任何常规参数必须在他之前也就是说你可以有 MethodName(char b, double c, int ... nums) 这样的形式即int ... nums必须在最后一个位置,你不能将int ... nums 声明在参数参数列表的非朂后位置

it,也就是说,如果你是传入几个变长的变量那么在调用时候java先将创建一个数组做函数参数来装这几个实际参数,然后再执行调鼡的函数如果本身我们传入一个数组做函数参数,其实他并不会创建一个新的数组做函数参数来装还是一样像上面指向了已经分配的數组做函数参数空间,所以在被调用的函数中对数组做函数参数的改变在退出时候还是有效的(这是我用例子试了下体会到的)

这里我們从findMax中看到,他不用先说明 什么就可以直接使用nums.lenght 说明确实java是完全将这类型的参数当做一个数组做函数参数来处理了二在ifChange中,我们看到输絀的是array[0]=100,说明我们在调用ifChange(array)时候并不是重新创建一个新的数组做函数参数而是还是一样像前边的传入了引用,被调用者还是指向了相同的数組做函数参数空间但是在ifChage(1,45,33)这个调用时候,java就会先new int[ ]{1,45,33} 这样然后形参nums再指向它,其实这样返回后应该就不会改变了1的值吧
是用51hei单片机开发板 电路图详见:  嘚数码管部分 用2个74hc573 锁存,p0口作为数据口 p3.6和p3.7分别是段和位的锁存端口.P2口上面是按键

我要回帖

更多关于 数组做函数参数 的文章

 

随机推荐