自从我学习 c 和 c++ 课程以来已经有一段时间了,我对 c 指针很好奇(我将在我的示例中使用 new 关键字,即使我知道 malloc 是 C 方式)。我总是记得我的老师总是强迫我们使用指针,她永远不会接受数组的作业,她向我们证明,当您使用指针而不是数组时,汇编语言中需要的命令更少。我想继续这种良好的做法,但我似乎很难使用指针,特别是双指针。
假设我想创建一个词库而不使用 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];
}
好吧,我困惑的最后一部分是通过函数传递双指针。
假设我有一个函数可以让我操作整个单词,假设我只想传递这个单词,我将通过函数调用传递什么以及函数定义将包含什么。假设我想传递整个库和一个将移动指针的数字,我将通过函数调用传递什么以及函数定义将包含什么。通常对所有问题感到抱歉如果我尝试通过编写简短的程序自己回答这些问题,但我很难编译它。我很感谢我收到的回复。
分配银行:
wordBank = malloc(wordCount * sizeof(char *));
分配单个单词:
char *addWord(char **wordBank, size_t idx, char *word) {
wordBank[idx] = malloc(strlen(word) + 1);
// this is how you pass a word
strcpy(wordBank[idx], word);
return wordBank[idx];
}
// how you pass the wordBank:
addWord(wordBand, index, someWord);
但在汇编中拥有更多指令并不一定是坏事。在编程中,恒定的开销通常不是问题。我会用std::string
and std::vector<string>
并将我的时间花在真正的问题上。至少在调试 malloc 和 free、设计和测试 NULL 指针方面没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)