Arrays

NC allows you to create arrays of integers, reals, elements, vectors and transforms. Arrays can also be passed to functions.

Just as in the C programming language, an NC array variable is defined by using a pair of square brackets after the variable, with the dimension of the array within the brackets.
    real theta[5] ;
    int count[4] ;
    element e[3] ;
    vector position[2] ;
    transform rotation[7] ;


The above defines array variables theta, count, e, position and rotation. The variable theta contains 5 real elements: theta[0], theta[1], theta[2], theta[3] and theta[4]. Each element of theta can be used in any place of an NC program that accepts a real variable. This includes a real argument of a function, for example:
    sin( theta[2] ) ;


Passing arrays to functions

The above example shows how a single element of an array is passed to a function.

An entire array can also be passed by reference to a function. To do this, the function has to accept an array. Just like in the C language, you denote this with a star ahead of the variable when you declare it in the argument list. You can then use that variable within the function as if it is an array, e.g.,
    void myFunction( real *a )
    {
      real d ;

      d = a[4] ;

    }

To pass an array to the function, you simply pass the name of the array, i.e., using the theta example described earlier, you can pass the array theta to myFunction with

    myFunction( theta ) ;

integers and real are passed "by value" to a function. If you change the value of the argument of the integer in a function, it would not affect the value of the original variable that was sent to the function. I.e., the function makes a copy of the variable and initializing it to the value that was passed in.

Arrays are different in that they are passed to a function "by reference." I.e. like the C programming language, you are passing the reference of the array to a function. If the function changes an element of an array that is passed to it, the value of the element also changes in the calling function. Indeed, this is a way for you to return multiple values back to a calling program, e.g.,
    void getNiceNumbers( real *result )
    {

      result[0] = 2.718 ;
      result[1] = 3.14159 ;
      result[2] = 1.618 ;

    }

    model( "e pi psi" )
    {

      float magic[3] ;

      getNiceNumbers( magic ) ;
      printf( "%f %f %f\n", magic[0], magic[1], magic[2] ) ;

    }