[Cython] array assignment

Greg Ewing greg.ewing at canterbury.ac.nz
Sat Oct 11 08:20:13 CEST 2008


Dag Sverre Seljebotn wrote:
> Robert Bradshaw wrote:
> 
>>     cdef double *a = [0.5, 0.3, 0.1, 0.1]
>
>>Note that it is still allocated on the stack, but a pointer type is  
>>needed as arrays aren't lvalues.
> 
> It looks a bit confusing...

I think it looks confusing, too. Is 'a' a real pointer
here? I.e. can you assign a different pointer value to
it later?

If so, then it's not obvious where the memory for the
initial value is being allocated. A C person would
probably guess that it's either statically allocated
(by analogy with char *p = "literal") or heap allocated.
Allocating it on the stack is neither a C-like nor a
Python-like thing to do.

It would be better if it were written as

   cdef double a[] = [0.5, 0.3, 0.1, 0.1]

the same as a statically initialized array. The fact
that arrays aren't lvalues isn't relevant, because
this isn't an assignment, it's a specification of
an initial value.

-- 
Greg


More information about the Cython-dev mailing list