As3两数组之间赋值并修改其一的问题解析

问题:

var arr1:Array = [1 , 2];
var arr2 = arr1;
arr2 = [3 , 4];

    想通过此去级联修改arr1么?做不到的,别试了。下面解释下原因。解释之前先解释下数组在不同语言里的区别,在c或者c++中数组是值传递和地址传递,但申明抛弃了指针的语言中,譬如java和as3(虽然实际还是指针在作用),现在都变成了地址引用。如果这个不懂的话那就没办法了,可以先百度下再继续看。数组在c++里的第一位存的是首地址,在as里也是一样吧,说错请指正。所以你直接用arr2 = [3 , 4]实际就是把所有的地址传给了arr2包括内部值的地址,但是你要知道arr1指向的地址还是原来的,所以其实这个时候arr2指向的地址和arr1的已经不是一块了,因此你去做第三行代码的操作是修改不了arr1的数据的。现在懂了么?那么要怎么做才能级联修改呢?

      下面就继续分析下:arr2[0] = 3 ; arr2[1] = 4这样修改后再试试呢?是不是已经修改了,这又是为什么?就是刚刚上面的解释。因为一个3赋给了arr2的0位,这样实际是修改了什么?是修改了指针所指向的值。而此时arr1和arr2所指向的地址是一致的,所以最后你会发现arr1的值也变了。上文如果有错误,还请指正。

posted @ 2011-12-09 17:08  yurong3000  阅读(227)  评论(0编辑  收藏  举报