Thread overview
Explicit conversion needed to go from array to pointer??
Feb 22, 2007
Henrik Harmsen
Feb 22, 2007
Leandro Lucarella
Feb 22, 2007
Henrik Harmsen
Feb 22, 2007
Stewart Gordon
Feb 22, 2007
Xinok
February 22, 2007
I'm looking at the D reference manual in the "arrays" section. It says under "usage":

int* p;
int[3] s;

p = s;		// p points to the first element of the array s.

But when I try this I get:
"cannot implicitly convert expression (s) of type int[3] to int*."

Why? Is the manual wrong or the compiler or what am I missing?

-- Henrik (newbie)

February 22, 2007
Henrik Harmsen escribió:
> I'm looking at the D reference manual in the "arrays" section. It says under "usage":
> 
> int* p;
> int[3] s;
> 
> p = s;		// p points to the first element of the array s.
> 
> But when I try this I get:
> "cannot implicitly convert expression (s) of type int[3] to int*."
> 
> Why? Is the manual wrong or the compiler or what am I missing?

The manual is wrong, this was deprecated not too long ago.

-- 
Leandro Lucarella
Integratech S.A.
4571-5252
February 22, 2007
Leandro Lucarella Wrote:

> Henrik Harmsen escribió:
> > I'm looking at the D reference manual in the "arrays" section. It says under "usage":
> > 
> > int* p;
> > int[3] s;
> > 
> > p = s;		// p points to the first element of the array s.
> > 
> > But when I try this I get:
> > "cannot implicitly convert expression (s) of type int[3] to int*."
> > 
> > Why? Is the manual wrong or the compiler or what am I missing?
> 
> The manual is wrong, this was deprecated not too long ago.
> 
> -- 
> Leandro Lucarella
> Integratech S.A.
> 4571-5252


Oh..

Deprecated in what way? Made illegal or obsolete or..?

Can I use an explicit cast? Will it work?

Like this:
p = cast(int*)s;		// p points to the first element of the array s.
?

-- Henrik

February 22, 2007
"Henrik Harmsen" <henrik@harmsen.se> wrote in message news:erka4u$2e0n$1@digitalmars.com...
>
> Deprecated in what way? Made illegal or obsolete or..?

Made illegal.  There were too many "gotchas" when passing arrays to C functions (which is really the only time this conversion was used).

> Can I use an explicit cast? Will it work?

You can just use the .ptr property of the array:

char* p = s.ptr;


February 22, 2007
Henrik Harmsen Wrote:
<snip>
> Deprecated in what way? Made illegal or obsolete or..?

Effectively, obsolete but not yet illegal.  Code that uses deprecated features can still be compiled using the -d compiler option.

> Can I use an explicit cast? Will it work?
> 
> Like this:
> p = cast(int*)s;	// p points to the first element of the array s.
> ?

You could, but perhaps nicer is to just use the .ptr property.

Stewart.
February 22, 2007

Henrik Harmsen wrote:
> Leandro Lucarella Wrote:
> 
>> Henrik Harmsen escribió:
>>> I'm looking at the D reference manual in the "arrays" section. It says under "usage":
>>>
>>> int* p;
>>> int[3] s;
>>>
>>> p = s;		// p points to the first element of the array s.
>>>
>>> But when I try this I get:
>>> "cannot implicitly convert expression (s) of type int[3] to int*."
>>>
>>> Why? Is the manual wrong or the compiler or what am I missing?
>> The manual is wrong, this was deprecated not too long ago.
>>
>> -- 
>> Leandro Lucarella
>> Integratech S.A.
>> 4571-5252
> 
> 
> Oh..
> 
> Deprecated in what way? Made illegal or obsolete or..?
> 
> Can I use an explicit cast? Will it work?
> 
> Like this:
> p = cast(int*)s;		// p points to the first element of the array s.
> ?
> 
> -- Henrik
> 
The best way I can find is to:
p = &s[0];

Or as others have said, just use the .ptr property.