Thread overview
Arrray sizeof
Dec 24, 2011
RenatoL
Dec 24, 2011
Mr. Anonymous
Dec 28, 2011
Regan Heath
December 24, 2011
snippet:


int[] arr1 = [1,2,3,4,5];
int[5] arr2 = [1,2,3,4,5];
writeln(arr1.sizeof);
writeln(arr2.sizeof);

Output:
8
20

"0 is ok to me but why "8"??
December 24, 2011
On 24.12.2011 18:46, RenatoL wrote:
> snippet:
>
>
> int[] arr1 = [1,2,3,4,5];
> int[5] arr2 = [1,2,3,4,5];
> writeln(arr1.sizeof);
> writeln(arr2.sizeof);
>
> Output:
> 8
> 20
>
> "0 is ok to me but why "8"??

8 is the size of the int[] type, which contains two pointers (or a pointer and a size).
To get 20, you can use:
arr1[0].sizeof * arr1.length
December 28, 2011
On Sat, 24 Dec 2011 16:46:18 -0000, RenatoL <rexlen@gmail.com> wrote:

> snippet:
>
>
> int[] arr1 = [1,2,3,4,5];
> int[5] arr2 = [1,2,3,4,5];
> writeln(arr1.sizeof);
> writeln(arr2.sizeof);
>
> Output:
> 8
> 20
>
> "0 is ok to me but why "8"??

It's a quirk of D that int[] is a reference type, so you get the size of the reference (as My Anonymous said, a length and pointer) whereas int[5] is a value type, so you get the size of the value.

It's the same as the following C..

int *arr1;
int arr2[5];

printf("%d\n", sizeof(arr1));
printf("%d\n", sizeof(arr2));

R

-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/