Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
February 22, 2007 Explicit conversion needed to go from array to pointer?? | ||||
---|---|---|---|---|
| ||||
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 Re: Explicit conversion needed to go from array to pointer?? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Henrik Harmsen | 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 Re: Explicit conversion needed to go from array to pointer?? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Leandro Lucarella | 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 Re: Explicit conversion needed to go from array to pointer?? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Henrik Harmsen | "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 Re: Explicit conversion needed to go from array to pointer?? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Henrik Harmsen | 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 Re: Explicit conversion needed to go from array to pointer?? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Henrik Harmsen |
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.
|
Copyright © 1999-2021 by the D Language Foundation