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 回答