www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - [Beginner]Variable length arrays

reply helxi <brucewayneshit gmail.com> writes:
I am trying to create an array which has a user defined size. 
However the following program is not compiling:

import std.stdio;

void main(){
     write("Enter your array size: ");
     int n;
     readf(" %s", &n);
     int[n] arr; //<-Error: variable input cannot be read at 
compile time
     writeln(arr);
}

1. What's causing this?
2. How can I get around this? I know I can always create a loop 
that appends value 'n' times.
Feb 25 2017
parent reply rikki cattermole <rikki cattermole.co.nz> writes:
On 26/02/2017 3:31 AM, helxi wrote:
 I am trying to create an array which has a user defined size. However
 the following program is not compiling:

 import std.stdio;

 void main(){
     write("Enter your array size: ");
     int n;
     readf(" %s", &n);
     int[n] arr; //<-Error: variable input cannot be read at compile time
     writeln(arr);
 }

 1. What's causing this?
T[X] is a static array, its size must be known at compile time. Static arrays are passed around by value not by reference and generally get stored on the stack not the heap.
 2. How can I get around this? I know I can always create a loop that
 appends value 'n' times.
This is where you want a dynamic array, allocated on the heap at runtime. T[] array; array.length = n;
Feb 25 2017
parent helxi <brucewayneshit gmail.com> writes:
On Saturday, 25 February 2017 at 14:34:31 UTC, rikki cattermole 
wrote:
 On 26/02/2017 3:31 AM, helxi wrote:
 I am trying to create an array which has a user defined size. 
 However
 the following program is not compiling:

 import std.stdio;

 void main(){
     write("Enter your array size: ");
     int n;
     readf(" %s", &n);
     int[n] arr; //<-Error: variable input cannot be read at 
 compile time
     writeln(arr);
 }

 1. What's causing this?
T[X] is a static array, its size must be known at compile time. Static arrays are passed around by value not by reference and generally get stored on the stack not the heap.
 2. How can I get around this? I know I can always create a 
 loop that
 appends value 'n' times.
This is where you want a dynamic array, allocated on the heap at runtime. T[] array; array.length = n;
Thanks
Feb 25 2017