如何通过指针访问数组的元素?

时间:2019-08-03 08:18:15

标签: c++

我正在尝试通过指针数组访问数组的元素。首先,我用chars和指针数组声明我的主数组,其中还将包含其他类似数组的名称:

char listSubjects[3][15] = {
    "sports", "movies", "fashion"
};
char* listPointers[1] = {
    listSubjects[3]
};

现在,我尝试从第一个数组(listNum这里为零)打印“运动”:

bub1->writeStr(listPointers[listNum][0]);

我收到此错误:

  

从“字符”到“字符*”的无效转换

陷入困境。我对指针还很陌生,不太了解我在做什么错

在尝试访问元素时,我也尝试使用star。它已编译,但我在屏幕上看不到任何文本。不知道它甚至试图输出什么值,在我的程序中我只看到一个空字符串

bub1->writeStr(*listPointers[listNum][0]);

2 个答案:

答案 0 :(得分:1)

这是一个错误

char* listPointers[1] = {
    listSubjects[3]
};

因为listSubjects数组的大小为3,所以listSubjects[3]是超出范围的数组访问。使用数组的大小尝试引用整个数组是一个常见的初学者错误,我认为这就是您在这里尝试的方法。

如果您想要指向listSubjects数组中每个项目的指针,则必须单独列出它们

char* listPointers[3] = {
    listSubjects[0],
    listSubjects[1],
    listSubjects[2]
};

然后您的代码就是

bub1->writeStr(listPointers[listNum]);

我认为在这种情况下,您不熟悉这些概念,导致您尝试编写比实际需要复杂的代码。

但是请注意,正如已经说过的,您并不是在这里真正学习C ++。这段代码是纯C语言。在C ++中,我们使用更简单的std::stringstd::vector来进行此类操作。

答案 1 :(得分:0)

listPointers[][]生成char,其中您的函数期望char*。 您要传递的是listPointers [listNum],没有第二个[]。

上述所有内容,请尽快退出该内容并使用std::stringstd::vector

相关问题