47961


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

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

[code]

    //--- ２次元配列による文字列の配列を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;
            }
    
[/code]


CC BY-SA 4.0
2018-08-31T03:17:25.180
47959
2018-08-31T13:16:42.587
2018-08-31T13:16:42.587
24284
question
c++
c++,文字列配列をvector<string>に変換するときの参照がわからない


この場合の「&」はアドレス演算子です。  
「&」が修飾する対象の型の記述がないことで判別できます。


CC BY-SA 4.0
2018-08-31T03:55:44.397
47960
2018-08-31T03:55:44.397
3793
47959
answer


w=5なので、5文字づつ進めてその都度、アドレス（ポインタ）をpush_back()しているということです。  
&p[i * w]は i行目の文字列の先頭を指すポインタということになりますね。


CC BY-SA 4.0
2018-08-31T04:14:10.673
47961
2018-08-31T04:14:10.673
29927
47959
answer