我希望将数组的精灵放到字符数组中......(很奇怪,我知道,但我不能使用STL lib)
所以我已将其声明为:const char *** DbRecord; DbRecord = new const char**[1000];
然后我有了这个功能:
bool AddToArray(const char* value,
const char *** database);
如何将指向const char * value
的指针存储到位置[0]
上的DbRecord?以及如何访问它然后能够读取实际保存在那里而不是指针的值?我对C ++中的指针感到困惑: - /感谢您的解释......
答案 0 :(得分:1)
如何将指向该const char *值的指针存储到位置[0]的DbRecord上?
你不能,因为一旦函数结束,value
将超出范围。
const char** DbRecord;
DbRecord = new const char*[1000];
void AddToArray(const char* value, const char** database)
{
database[0] = value;
}
答案 1 :(得分:1)
DbRecord是一个指向const char **
的指针数组,所以当你说DbRecord[0]
时,它实际上意味着3D char数组的第一行,哪些元素是const char**
类型。因此,DbRecord[0][0] = value
会将变量value
存储在index row [0][0]
,如果这是您想要的。
为DbRecord分配内存时,只执行
DbRecord = new const char**[1000];
是不够的,你必须设置其他两个维度的大小。
您可以尝试使用std::string
替换const char *
和vector<vector<string>>
来替换
在C ++中const char ***
,在这种情况下,您不再需要担心这些指针。
答案 2 :(得分:1)
确定。你问的问题很简单。 :)
我希望将一系列精灵用于数组......
你走在正确的轨道上。至少那是char *[]
。但是,众所周知,这很容易转化为char **
。当然,要有一个指向存储的指针,您需要添加第三个星。到目前为止,你的问题是正确的。
如何将指向该const char *值的指针存储到位置[0]
上的DbRecord
有两种方法可以做到这一点。 问你的问题的正确答案是取消引用指针。例如:
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 [][]