www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Explicit conversion needed to go from array to pointer??

reply Henrik Harmsen <henrik harmsen.se> writes:
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)
Feb 22 2007
parent reply Leandro Lucarella <llucarella integratech.com.ar> writes:
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
Feb 22 2007
parent reply Henrik Harmsen <henrik harmsen.se> writes:
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
Feb 22 2007
next sibling parent "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"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;
Feb 22 2007
prev sibling next sibling parent Stewart Gordon <smjg_1998 yahoo.com> writes:
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.
Feb 22 2007
prev sibling parent Xinok <xnknet gmail.com> writes:
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?

-- 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

p = &s[0]; Or as others have said, just use the .ptr property.
Feb 22 2007