comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: accessing heap variable elements
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: accessing heap variable elements [message #25061] Sat, 12 May 2001 10:42
Ken Mankoff is currently offline  Ken Mankoff
Messages: 158
Registered: February 2000
Senior Member
On Sat, 12 May 2001, Ken Mankoff wrote:

> On Sat, 12 May 2001, Jared Crossley wrote:
>
>> Can any one explain this to me?
>> ------------------------------------
>> IDL> a=ptr_new( lonarr(2) )
>> IDL> help, a
>> A POINTER = <PtrHeapVar2229>
>> IDL> help, *a
>> <PtrHeapVar2229>
>> LONG = Array[2]
>> IDL> help, *a[0]
>> <PtrHeapVar2229>
>> LONG = Array[2]
>> IDL> help, *a[1]
>> % Attempt to subscript A with <INT ( 1)> is out of range.
>> ------------------------------------
>> I would expect that *a[0] and *a[1] would be long integers. How do I
>> access the elements in the long integer array heap variable?
>>
>> Thanks, Jared
>
> Hi Jared,
>
> last line should be (*a)[0]
>
> -k.
>

sorry, i realized i should include an explanation, as you requested.

its all about operator precedence. Now, "[" is *not* mentioned in the IDL
5.3 Online Help, but they have this:

Priority Operator
------------------------------------------------------------ ----------
First (highest) ( ) (parentheses, to group expressions)
Second * (pointer dereference)
^ (exponentiation)
Third * (multiplication)
# and ## (matrix multiplication)
etc.

I think its safe to assume that [ ] is parsed as ( ).

so:
( *a[ 0 ] EQ *(a[ 0 ]) )
which means "take subscript of 'a', then dereference it."

But 'a' is a pointer to an array, not an array of pointers. So you can't
subscript it, and even if you could, i'm not sure what you'd be
dereferenceing with your *.

You want the opposite order, or:
(*a)[ 0 ]
which means "dereference 'a', then take subscript."


-k.

--
Ken Mankoff
LASP://303.492.3264
http://lasp.colorado.edu/~mankoff/
Re: accessing heap variable elements [message #25062 is a reply to message #25061] Sat, 12 May 2001 10:28 Go to previous message
Ken Mankoff is currently offline  Ken Mankoff
Messages: 158
Registered: February 2000
Senior Member
On Sat, 12 May 2001, Jared Crossley wrote:

> Can any one explain this to me?
> ------------------------------------
> IDL> a=ptr_new( lonarr(2) )
> IDL> help, a
> A POINTER = <PtrHeapVar2229>
> IDL> help, *a
> <PtrHeapVar2229>
> LONG = Array[2]
> IDL> help, *a[0]
> <PtrHeapVar2229>
> LONG = Array[2]
> IDL> help, *a[1]
> % Attempt to subscript A with <INT ( 1)> is out of range.
> ------------------------------------
> I would expect that *a[0] and *a[1] would be long integers. How do I
> access the elements in the long integer array heap variable?
>
> Thanks, Jared

Hi Jared,

last line should be (*a)[0]

-k.

--
Ken Mankoff
LASP://303.492.3264
http://lasp.colorado.edu/~mankoff/
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: accessing heap variable elements
Next Topic: Convert Integer to Text

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 19:13:15 PDT 2025

Total time taken to generate the page: 0.00359 seconds