请问一个变量的定义怎么理解

请教一个变量的定义如何理解?
template   <typename   T,   size_t   size>
T   min(T   (&r_array)[size])   {
    T   min_val   =   r_array[0];

    for   (int   i   =   1;i   <   size;i++)   {
        if   (r_array[i]   <   min_val)
            min_val   =   r_array[i];
    }

    return   min_val;
}

int   ia[]   =   {0,   1,   2,   3,   5};
double   da[]   =   {1.2,   3.2,   6.3,   7.4,   5.6};

int   i   =   min(ia);
double   d   =   min(da);


其中第二行中的T   (&r_array)[size]这个定义应该怎样理解呢?

------解决方案--------------------
T min(T (&r_array)[size])
min函数返回类型是T,形参是一个类型为T的引用数组,数组大小为size
------解决方案--------------------
楼上的表达方式可能有问题,确切的说应该是:T (&r_array)[size])的含义为r_array是一个类型为T,大小为size的数组的引用。
比如定义:int iarr[10]; int (&riarr)[10];
那么就可以riarr = iarr。
C++明确规定不能定义一个引用数组。
------解决方案--------------------
它是通过模板的魔力完成的。再认真看C++ Primer,你会理解到,模板生来就干这些神奇事的。