Date: Mon, 13 Jan 1997 16:04:25 -0200 Message-Id: <1.5.4.16.19970113132927.28df398e@dmeasc.rc.ipt.br> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" To: combee AT cambridge DOT scr DOT slb DOT com (Leendert Combee), glynnec AT ix DOT netcom DOT com (Glynne Casteel) From: Cesar Scarpini Rabak Subject: Re: f2c+djgpp Cc: djgpp AT delorie DOT com At 10:43 13/01/97 +0000, Leendert Combee wrote: >> This is no cause for concern; a does not need to be reset! The reason >> is that it is passed in as a pointer to the function. Something like >> [I assume]: >> >> void test( double *a, int n ) >> { >> /* decrementing a here has no effect on its value >> * in the calling program!! >> */ >> a--; /* calling program cannot see this */ >> >> /* HOWEVER changing the values that it points to >> * will be reflected in the calling program >> */ >> a[1] = 16.0; /* calling program CAN see this change */ >> >> } >> > > No!, on return a[i] correspond now to a[i+1] before the function was called > (+whatever happened in the function). Because a (not *a) is a pointer, > --a changes that value! The code generated by f2c shoudl really use > a_new-- = a ; and then work with a_new rather than a. This causes that > a[i] still points to same element of a before _and_after the function > call !! > > Leendert > Do you have test cases to support evidence on this? The pointer passed as parameter in the function is _a copy_ of the pointer sent as argument, so Casteel's comments seem correct, except if the C compiler you use afterwards in the generated code decides to "optimize" so much to use the same memory position! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cesar Scarpini Rabak E-mail: csrabak AT ipt DOT br DME/ASC Phone: 55-11-268-3522 Ext.350 IPT - Instituto de Pesquisas Tecnologicas Fax: 55-11-268-5996 Av. Prof. Almeida Prado, 532. Sao Paulo - SP 05508-901 BRAZIL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~