関数部のfor文内のtemp.push_back(&p[i * w]);&p[i * w]&の意味がわかりません。
&は参照という意味であることは理解しているのですがなぜ参照するのでしょうか?

また、仮引数の時点で配列は先頭のポインターを渡しているのでchar *pでポインタ変数で受けることは理解していますが、それなのになぜ参照するのでしょうか?解説をお願いしたいです。

//--- 2次元配列による文字列の配列をvector<string>に変換 ---//
        vector<string> str2dary_to_vec(char *p, int h, int w)
        {
            vector<string> temp;
            for (int i = 0; i < h; i++)
                //temp.push_back("aaa");
                temp.push_back(&p[i * w]);//ここです。
            return temp;
        }


        int main()
        {
            char a[][5] = { "LISP", "C", "Ada" };       // 配列による文字列の配列


            vector<string> sa = str2dary_to_vec(&a[0][0], 3, 5);
            for (vector<string>::size_type i = 0; i < sa.size(); i++)
                cout << "sa[" << i << "] = " << sa[i] << '\n';



            _getch();
            return 0;
        }