0

我想要一个指向字符数组的指针数组......(很奇怪,我知道,但我不能使用 STL lib)所以我将它声明为:const char *** DbRecord; DbRecord = new const char**[1000];

然后我有了这个功能:

 bool AddToArray(const char* value,
        const char *** database);

如何将指向const char * value我的 DbRecord 的指针存储在位置上[0]?以及如何访问它以便能够读取实际保存在那里而不是指针的值?我真的对 C++ 中的指针感到困惑:-/ 感谢您的解释......

4

3 回答 3

1

如何将指向该 const char * 值的指针存储到我的 DbRecord 位置 [0] ?

你不能,因为value一旦函数结束就会超出范围。

你真的需要三颗星吗?在我看来,两个就足够了:

const char** DbRecord;
DbRecord = new const char*[1000];

void AddToArray(const char* value, const char** database)
{
    database[0] = value;
}
于 2013-04-09T20:20:47.077 回答
1

DbRecord 是一个指向 的指针数组const char **,所以当你说它DbRecord[0]实际上是指 3D char 数组的第一行时,它的元素是const char**类型。如果这是您想要的,那么DbRecord[0][0] = value会将变量存储在valueindex row [0][0]

当你为 DbRecord 分配内存时,只做

DbRecord = new const char**[1000];

还不够,你必须设置其他两个维度的大小。

您可以尝试在 C++ 中使用std::stringto replaceconst char *vector<vector<string>> replace const char ***,在这种情况下,您不必再担心那些指针了。

于 2013-04-09T20:22:31.180 回答
1

行。你问的问题很简单。:)

我想有一系列指向字符数组的指针......

你在正确的轨道上。至少是这样char *[]。但是,众所周知,这很容易翻译成char **. 当然,要拥有指向存储的指针,您需要添加第三颗星。到目前为止,您的问题是正确的。

如何将指向该 const char * 值的指针存储到我的 DbRecord 位置 [0]

那么有两种方法可以做到这一点。您提出的问题的正确答案是取消引用指针。例如:

bool AddToArray(const char* value,
    const char *** database)
{
    bool success = false;
    ((*database)[0]) = value;
    if ( (*database)[0] == value ) success == true;
    return success;
}

从技术上讲,将指针作为数组访问也会将其作为索引取消引用。所以[0]那里将直接取消引用指针。根据您布置分配和内存的方式,您也可以这样做:

...
(*(database[0])) = value;
...

注意那里的细微差别。第一个示例将其视为指向指针数组的指针(或指向数组数组的指针,具体取决于您的想法),而第二个示例将其视为指向数组的指针数组(或数组指针的指针)。

作为 C 开发人员,学习掌握多级指针是您可以做的最好的事情之一,但在 C++ 中,这通常是一种不受欢迎的做法。

希望这可以帮助。

编辑:char *[]不是char [][]

于 2013-04-09T20:38:42.563 回答