Addressing your second question, if you want to pass an array of value_type, then you can accept an argument of type value_type*. Consider the following code:
Code:
#include <iostream>
using std::cout;
using std::endl;
typedef char value_type[3];
void do_stuff(value_type *arr)
{
memcpy(arr[0],"ab",3);
memcpy(arr[1],"cd",3);
memcpy(arr[2],"ef",3);
memcpy(arr[3],"gh",3);
memcpy(arr[4],"ij",3);
}
int main()
{
value_type a[5];
memset(a,0,15);
do_stuff(a);
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
cout << a[3] << endl;
cout << a[4] << endl;
return 0;
}