A 65000 by 65000 array of int
s would take about 16 gigabytes of memory, so it's not surprising you got an out of memory error. I couldn't get a single .NET 3.5 application to allocate more than about 1.7GB of memory when I last tried, so no luck there.
As for passing one dimension to a function, it depends. You may be able to do what you want with a jagged array:
int[][] array = new int[3][];
for (int i = 0; i < array.Length; i++)
array[i] = new int[3];
string b = concatenate(array[0]);
That way each position in the first dimension is its own array, which you can pass around (as in the last line). If you wanted to pass a row of items in the other 'direction', you'd have to copy items around first.
PS: You might want to look at String.Join
and String.Concat
for your concatenating needs. The second has a lot of overloads, but you probably need the first for displaying integers.