距离我上过C和C++课程已经有一段时间了,现在我对C指针很感兴趣(虽然我知道malloc是C的方式,但我将在我的示例中使用new关键字)。我总是记得我的老师强制我们使用指针,她从来不接受数组作业,她向我们证明了用指针而不是数组时汇编语言所需的命令更少。我想继续这个好习惯,但我似乎很难使用指针,特别是双指针。
假设我想创建一个单词库,而不使用C++字符串数据类型,我有一个char类型的双指针。
int main()
{
string fileName = "file.txt";
char** wordBank = null;
int wordCount = countWords(fileName); //somefunction to get word count
}
现在我需要分配一个足够大的内存空间来为整个银行服务,但是我不确定如何做到这一点。我认为应该像这样:
wordBank = new char*[wordCount];
现在我需要为每个单词分配特定的空间大小,但我仍然不确定。
for(int i = 0; i < wordCount; i++)
{
wordLength = getWordLength(fileName, i); // some function to get word length of each...
//... word in the bank
(*wordBank) = new char[wordLength];
}
好的,最后一部分让我有点困惑的是如何通过函数传递双指针。 假设我有一个函数可以操作整个单词,假设我只想传递这个单词,那么在函数调用中我应该传递什么,在函数定义中又应该怎样写?如果我想传递整个银行和一个移动指针的数字,那么在函数调用中我应该传递什么,在函数定义中又应该怎样写?抱歉提了这么多问题,通常来说我会尝试编写短程序自己回答这些问题,但我现在很难让它编译通过。感谢您的回复。
*
和[]
。 - motokuwordBank[i] = new char[wordLength]
。 - angdevnew
关键字所示),那么我非常强烈建议使用std::string
。在这种情况下没有不使用它的好理由。它将为您处理所有的内存管理,您不必担心空终止符,并且它的效率不会比自己分配和复制低。你的wordBank
数组最好也是一个std::vector<std::string>
。同样,它并不会降低效率,但更容易、更安全地使用。 - Tristan Brindlenew
或malloc
时,你会花费更多的时间来担心程序出了什么问题,而你真正节省的性能却很少。 - Excelcius