0

文字列の配列を作成し、それらをリンクされたリストに接続しようとしています。問題は、配列しか使用できないことです。インストラクターは、テンプレートやベクターなどは使用できないと言いました。これらは、これを実行できることがわかった唯一の方法です。これはリンクされたリストでさえないと思います。彼は、行内の次の要素を指すのではなく、配列を並行して処理することを望んでいます。

#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string names [4] = {"Dick", "Harry", "Sam", "Tom"};
    string *nameptr[4];

    for(int x = 0; x < 4; x++)
    {
        *nameptr[x] = names[x];
        cout << nameptr[x] << "  ";
        cout << &nameptr[x] << endl;
    }
}

このコードの何が問題になっていますか? 私は何が欠けていますか?

誰かがこれに光を当てることができれば、それは素晴らしいことです。

4

2 に答える 2

4

あなたの質問は明確ではありませんが、コードを実行するためです。

アップデートしてみる

*nameptr[x] = names[x];

nameptr[x] = &names[x];
于 2013-02-15T00:01:46.140 に答える
3

string names[4] = {"Dick", "Harry", "Sam", "Tom"};std::stringオブジェクトの配列です。オブジェクトstring *nameptr[4];へのポインターの配列です。std::string

ポインターを初期化するには、ポインターが指すアドレスを割り当てる必要があります。nameptr[x] = &names[x];

逆参照演算子( *) は、ポインタが指すメモリにアクセスする場合に使用されます。たとえば、次をnameptr[x]指す文字列を出力します。std::cout << *nameptr[x];


プログラムが「動作を停止した」理由の説明: string *nameptr[4];、つまりポインタの配列を宣言しましたが、初期化していません。次に、ループで実行しようとしていました。これは、「オブジェクトを取得し、それを指すオブジェクトを置き換える*nameptr[x] = names[x];」ことを意味します。まだ初期化されていないポインターを逆参照していたため、未定義の動作が発生しましたnames[x]nameptr[x]

于 2013-02-15T00:02:28.803 に答える