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

标签 c++ c pointers double

自从我学习 c 和 c++ 类(class)以来,我对 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::stringstd::vector<string>把我的时间花在真正的问题上。至少在调试 mallocs 和 frees、分配和测试 NULL 指针时不会。

关于c++ - c/c++关于指针的问题(双指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22801431/

相关文章:

c++ - 我可以使用 C 套接字而不包含 <sys/socket.h> 吗?

c - 如果在 C 中使用 malloc((size_t)NULL) 会发生什么

c++ - 对递归数独回溯函数的模糊调用。

c++ - 如何组织隐藏父窗口的父子窗口系统。 QT

c - 静态链接到其中一个库的可移植方式

尝试访问对象的方法时出现 C++ Qt 段错误

c++ - 每次我将第一个整数放入数组时,方法都会崩溃。操作不好?

泛型编程中的 C++ 类型验证

具有纯虚运算符+函数的 C++ 抽象基类

c - C 中的意外行为