Static vs dynamic arrays

Part of ArraysCategory

Description

Shows the use of static and dynamic arrays, when references are copied and duplication is needed.

Example

import std.c.stdio;
import std.string;

int main(char[][] args)
{
    int[] a = new int[4];
    static int[4] a1 = [10, 20, 30, 40];
    int[4] b, c;
    int[] d, e;

    // initialize the vector a with the values from a1 (i = 0..2, j = a1[0] .. a1[2])
    foreach (int i, int j; a1)
        a[i] = j / 10;
    printf("a1[2] = %d\n", a1[2]);
    // copy the vector a1 in the vector b
    b[] = a1;
    printf("\tb[2] = %d\n", b[2]);
    // duplicate the vector a1 in the vector b (not needed for static arrays)
    c[] = a1.dup;
    printf("\tc[2] = %d\n", c[2]);
    printf("a[2] = %d\n", a[2]);
    // copy the vector a in the vector c (d is dynamic, so only the reference is copied)
    d = a[];
    printf("\td[2] = %d\n", d[2]);
    // duplicate the vector a in the vector c (in this case it makes difference)
    e = a[].dup;
    printf("\te[2] = %d\n", e[2]);
    // now a1[2] is modified
    a1[2] = 0;

    printf("a1[2] = %d\n", a1[2]);
    // b is not modified
    printf("\tb[2] = %d\n", b[2]);
    // neither is c
    printf("\tc[2] = %d\n", c[2]);
    // now a[2] is modified
    a[2] = 0;

    printf("a[2] = %d\n", a[2]);
    // d IS modified, because it is just a reference
    printf("\td[2] = %d\n", d[2]);
    // e IS NOT modified, because it is a copy
    printf("\te[2] = %d\n", e[2]);
    return 0;
}

Source

Link http://www.dsource.org/tutorials/index.php?show_example=149
Posted by Anonymous