2

私は現在、C++ Primer Fifth Edition に取り組んでいます。他にも C++ の本を何冊か読みましたが、それらはあまり詳しくなく、非常に複雑でした。

この本は、私が見逃していたすべてのことを私に大いに助けてくれました。私はちょうど壁にぶつかった。

演習の 1 つでは、末尾の return、decltype、または型エイリアスを使用せずに、10 個の文字列の配列への参照を返す関数の宣言を書くように求められます。

次のように、私が行った宣言を書くだけだと言っていることを私は知っています:

string (&returnArray()) [10];

次のように、関数定義も書きたかったのです。

string (&returnString(int i, string s)) [10]
{
    string s1[10];

    s1[i] = s;

    return s1;
}

メイン関数には、文字列リテラルを渡し、その文字列を 10 個の文字列の配列へのポインター内に格納する for ループがあります。次に、結果を画面に出力する必要があります。

私が抱えている問題は、配列へのポインターを逆参照すると、アドレスが出力されることです。逆参照を 2 回行うと、プログラムは何も出力せず、応答を停止します。

これが私の主な機能です。何度も変更しましたが、正しく出力されない理由がわかりません。多分全部間違えてる…

int main()
{
    string (*s)[10];

    for(int i = 0; i != 10; ++i)
    {
            s = &returnString(i, "Hello");

            cout << s[i] << endl;
    }

    return 0;
}
4

3 に答える 3