Hi, Thanks for the reply, and yes I am coming from a c background.
Even though "the address itself is passed by value" (passing a pointer by copy) the result is still a locally scoped function variable that points to the original object (see debug comments below). "so you cannot change it [the address]" I don't think I want to change it (the value of the class reference variable that points to the original object). I want to make changes to the original object itself (which I now have an address for via the pointer passed by copy). My question is why does the value of this locally scoped function variable automatically change to point to a newly created object of the same type when I attempt to make changes to it (see debug comments below). Or to put it another way. If my locally scoped function variable is now actually pointing to my original object why can I not directly manipulate my original object from within the function? Thanks, Rich --- In [email protected] <mailto:[email protected]> , "Ralf Bokelberg" <[EMAIL PROTECTED]> wrote: > > Hi Rich > > Are you coming from a c background? > Logically a object parameter is passed by reference, which means, the > address is passed to the method instead of a copy of the object's > values. > Technically the address itself is passed by value though, so you > cannot change it. > > Cheers > Ralf. > > On Nov 9, 2007 1:03 PM, quiet.mountain <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > Hi, > > > > I've read through all of the posts here on pointers and also this > > page - http://www.mischel.com/diary/2006/07/24.htm <http://www.mischel.com/diary/2006/07/24.htm> , but can someone > > clear up something that's been bothering me please? > > > > Can a function change the value of a non-primitive type that's passed > > as a parameter? > > > > If I pass a reference to an object as a function parameter, the local > > function variable then holds the address of the object on the heap. > > Fine. > > > > If I then attempt to make changes to this object within the function, > > the address of the local function reference variable changes to > > another address on the heap and creates a new object. The original > > object is not updated. We end up with two reference variables > > pointing to two different objects on the heap. > > > > I thought the point of "pass by reference" for non-primitives in AS3 > > was to be able to manipulate objects directly by passing the hex > > address of the object on the heap (as in c++) > > > > I understand that a solution is to return the local reference to the > > temporary object from the function and assign it to the class > > instance variable, so this is more an exercise in understanding the > > essential workings of AS3. > > > > Here's some code. > > > > ----- AS3 Code starts ----- > > > > private var collectionAC:ArrayCollection = new ArrayCollection(); > > // Debug: value of collectionAC is @4deb859 > > > > private function resultHandler(event:ResultEvent, ac:ArrayCollection) > > { > > // Debug: value of ac is also @4deb859 > > // There are now 2 reference variables pointing to > > // one object on the heap > > > > ac = event.result.products.rug; > > > > // Debug: value of ac is now @4f839e1 > > // ?WHY? does this line create a new object scoped to > > // the function and not modify the original object directly? > > } > > > > ------ MXML code starts ---------- > > > > <mx:HTTPService id="collectionService" > > url="data/collection.xml" > > result="resultHandler(event, collectionAC);"/> > > > > ------ Code ends -------- > > > > Many thanks, Rich > > > > > > > > -- > Ralf Bokelberg <[EMAIL PROTECTED]> > Flex & Flash Consultant based in Cologne/Germany > Phone +49 (0) 221 530 15 35 >

