Array uses functional programming notation to generate the elements
Array[mat,50] expect mat to be a function of a single argument. if it is not defined, than it is just a head, since Mathematica is also symbolic language
The same as
As for timings, Table is usually faster, but has the benefit of a shorter syntax form and allows offsets for the indexes
one last comment is that usually there is no need to "prepare in advance" indexed functions or "variables"