Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c/c++;指针问题(双指针) 这是我学习C语言和C++课程以来的一段时间,我对C指针很好奇(我想在我的例子中使用新的关键字,甚至我知道MalLC是C方式)。我总是记得我的老师总是强迫我们使用指针,她从不接受数组的作业,她向我们证明,当使用指针而不是数组时,汇编语言中所需的命令更少。我想继续这种良好的做法,但我似乎很难使用指针,特别是双磅 让我想创建一个不使用C++字符串数据类型的单词库,并且我有一个类型的字符指针。 int main() { string fileName = "file.txt"; char** wordBank = null; int wordCount = countWords(fileName); //somefunction to get word count }_C++_C_Pointers_Double - Fatal编程技术网

c/c++;指针问题(双指针) 这是我学习C语言和C++课程以来的一段时间,我对C指针很好奇(我想在我的例子中使用新的关键字,甚至我知道MalLC是C方式)。我总是记得我的老师总是强迫我们使用指针,她从不接受数组的作业,她向我们证明,当使用指针而不是数组时,汇编语言中所需的命令更少。我想继续这种良好的做法,但我似乎很难使用指针,特别是双磅 让我想创建一个不使用C++字符串数据类型的单词库,并且我有一个类型的字符指针。 int main() { string fileName = "file.txt"; char** wordBank = null; int wordCount = countWords(fileName); //somefunction to get word count }

c/c++;指针问题(双指针) 这是我学习C语言和C++课程以来的一段时间,我对C指针很好奇(我想在我的例子中使用新的关键字,甚至我知道MalLC是C方式)。我总是记得我的老师总是强迫我们使用指针,她从不接受数组的作业,她向我们证明,当使用指针而不是数组时,汇编语言中所需的命令更少。我想继续这种良好的做法,但我似乎很难使用指针,特别是双磅 让我想创建一个不使用C++字符串数据类型的单词库,并且我有一个类型的字符指针。 int main() { string fileName = "file.txt"; char** wordBank = null; int wordCount = countWords(fileName); //somefunction to get word count },c++,c,pointers,double,C++,C,Pointers,Double,现在我需要为整个银行分配一个足够大的内存空间,但我不确定如何做到这一点,我相信是这样的事情 wordBank = new char*[wordCount]; 现在我需要为每个单词的大小分配特定的空间,我仍然不确定,但是 for(int i = 0; i < wordCount; i++) { wordLength = getWordLength(fileName, i); // some function to get word length of each... //...

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

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];
}
for(int i=0;i
好的,我不明白的最后一部分是通过函数传递双指针。 假设我有一个函数,它允许我操作一个完整的词,假设我只想传递这个词,通过函数调用传递什么,函数定义有什么。让我们假设我要传递整个银行和一个移动指针的数字,通过函数调用传递什么,函数定义有什么。很抱歉,如果我试图通过编写简短的程序来回答这些问题,通常会遇到很多问题,但我很难将其编译好。我感谢收到的回复。

要分配银行:

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
std::vector
并将时间花在实际问题上。至少不需要调试mallocs和free,分配和测试空指针。

My take:

wordBank = new char*[wordCount];
这很好:您正在分配
char*

for(int i = 0; i < wordCount; i++)
{
   wordLength = getWordLength(fileName, i); // some function to get word length of each...
   //... word in the bank
   wordBank[i] = new char[wordLength];
}
所以。。。如果希望
fillIt()
实际修改
myPointer
指向的位置,函数应为:

void fillIt(char * & p) { ... }
或者,您可以将其定义为:

void fillIt(char ** p) { ... }
并将其作为

char *myPointer=0;

fillIt(&myPointer);

我尽量避免混淆<代码> */> >和<代码> []/Cord>。代码>词库[i] =新字符[WordLe] [/Cord] >我知道你在这个问题中说你不想,但是如果你使用C++(如<代码>新< /COD>关键字),那么我真的强烈建议使用<代码> STD::String 。在这种情况下,没有理由不这样做。它将为您处理所有的内存管理,您不必担心nul终止符,而且它的效率不会低于您自己进行所有的分配和复制。您的
wordBank
数组作为
std::vector
也会更好。同样,它的效率并没有降低,但使用起来更容易、更安全。命令更少并不一定意味着性能更好。查找“过早优化”。我不认为这个概念是一个好的实践,而是相反。相信我,当你在任何地方使用
new
malloc
时,你会花更多的时间担心你的程序出了什么问题,而不是实际节省了多少性能。请注意使用
std::string
std::vector
。。。但是在你的例子中,使用新的代替Malc不是更好吗?在C++中更好,但是使用NeX/DELT是没有意义的:如果你有POSIX,那么<代码> WordBoo[i] = StrudUp(Word)是一个小的缺点,我可以给最后一段额外的投票吗?最后一段为1。此外,数组和指针访问之间的汇编语言差异往往是简单的算法。即使代码确实需要优化,它通常也会改变缓存未命中和/或不可预测的条件分支,从而产生很大的差异。
char *myPointer=0;

fillIt(&myPointer);