关于指针的c/c ++问题(双指针)

use*_*272 4 c c++ double pointers

所以我用了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
}
Run Code Online (Sandbox Code Playgroud)

现在我需要为整个银行分配一个足够大的内存空间但我不确定如何做到这一点我相信它是这样的事情?

wordBank = new char*[wordCount];
Run Code Online (Sandbox Code Playgroud)

现在我需要为每个单词的大小分配特定空间,我仍然不确定aobut.

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];
}
Run Code Online (Sandbox Code Playgroud)

好吧,我很困惑的最后一部分是通过函数传递双指针.假设我有一个函数可以让我操作一个完整的单词,让我说我只想传递这个单词,我将通过函数调用传递什么以及函数定义有什么.并且假设我想传递整个存储区和一个将移动指针的数字,我将通过函数调用传递什么以及函数定义具有什么.抱歉所有问题通常如果我试图通过编写简短的程序自己回答这些问题,但我很难将其编译.我很欣赏我收到的回复.

per*_*eal 8

分配银行:

wordBank = malloc(wordCount * sizeof(char *));
Run Code Online (Sandbox Code Playgroud)

分配单个词:

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);
Run Code Online (Sandbox Code Playgroud)

但是在装配中有更多指令并不一定是坏事.在编程中,恒定的开销通常不是问题.我会用std::string,std::vector<string>并把时间花在真正的问题上.至少不是调试mallocs和frees,分配和测试NULL指针.