My question is this: I don't understand how the construct solc[] works. It appears to be working as an array
yet it is using functional syntax. The code works. Can anybody explain this?
Thanks in advance. 
 p1 = VectorPlot[{u, 3 v}, {u, -3, 3}, {v, -3, 3}] ;
 odec[u0_, v0_] := 
   NDSolve[{u'[t] == u[t], v'[t] == 3 v[t], u[0] == u0, 
     v[0] == v0}, {u[t], v[t]}, {t, -3, 3}];
 solc[1] = odec[1, 1]; solc[2] = odec[1, -1]; solc[3] = odec[-1, -1]; 
 solc[4] = odec[-1, 1]; solc[5] = odec[3, 1]; solc[6] = odec[1, 3]; 
 solc[7] = odec[-1, -3]; solc[8] = odec[-3, -1];
 p2 = ParametricPlot[
    Evaluate[Table[{u[t], v[t]} /. solc[i], {i, 8}]], {t, -3, 3}, 
   PlotRange -> {{-3, 3}, {-3, 3}}, PlotPoints -> 100, 
   AxesLabel -> {"u", "y"}];
Show[{p1, p2}, PlotRange -> {{-3, 3}, {-3, 3}}, 
 AxesLabel -> {"x", "y"}, Axes -> True]