Use a 2D array,after all the compiler knows better.An optimized compiler will always generate the same binary code for both notations,but the first one is more clear and readable.I think the only good excuse to use the second one is when you want to overload the operator() to enable a syntax with () like on array2D(x,y).Cheers.