无法创建用户输入大小的字符串数组。我获得了数组大小的用户输入,但是我无法将此值传递给另一个函数来创建字符串数组。关于我在这里做错了什么的任何解释?我通过引用将用户输入的值传递给我的新函数,但出现错误无法将 string
转换为 string*
using namespace std;
#include <iostream>
#include <fstream>
#include <string>
//function prototypes
void getSize(int &arraySize);
void getSpace(int arraySize, string *word);
//Calls other functions otherwise does nothing
int main()
{
int numStrings;
string *words;
getSize(numStrings);
getSpace (numStrings, *words);
}//end main
// asks the user how many strings they want
void getSize(int &arraySize){
cout << "How many strings do you want? ";
cin >> arraySize;
}
// gets an array in the heap of the size requested by the user
void getSpace(int arraySize, string *word){
word = new string [arraySize];
}
最佳答案
忽略房间里的大象,std::vector
,
void getSpace(int arraySize, string *word);
指定一个函数,该函数接受一个int
和一个指向string
的指针。在函数内部,您将一个数组分配给 string
的指针。
但是!
指针是一个包含地址的变量,该地址按值传递给函数。 getSpace
word
是调用者提供的地址的拷贝。两者具有相同的值,指向同一个地方,但是如果你改变一个指向的地方,那个变化不会反射(reflect)在另一个上。改变 word
的值不会改变调用函数中的原始值。您需要通过引用传递指针,以便能够在调用者中更新指针。
您可以将 getSpace
定义为
void getSpace(int arraySize, string * & word);
并调用它
getSpace (numStrings, words);
但定义它会更容易
string * getSpace(int arraySize);
并调用它
words = getSpace (numStrings);
省去麻烦。也更容易阅读。通过返回指针,函数清楚地为调用者提供了一个指向字符串的指针。以前的版本可能正在使用一个字符串,导致 Mikhail Genkin 在对其他答案之一的评论中提到的未初始化变量警告。
记得在完成后删除[]个单词;
。
关于C++通过指针填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36634598/