C++通过指针填充数组

标签 c++ arrays pointers reference pass-by-reference

无法创建用户输入大小的字符串数组。我获得了数组大小的用户输入,但是我无法将此值传递给另一个函数来创建字符串数组。关于我在这里做错了什么的任何解释?我通过引用将用户输入的值传递给我的新函数,但出现错误无法将 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/

相关文章:

Python:如何增加 ctypes POINTER 实例

c++ - 指向二维数组的指针

javascript - 将值从 arduino 发送到 Highcharts

c++ - 升压:bad_any_cast: failed conversion using boost:any_cast error

python - 在 Python 中绘制向量数组 (pyplot)

arrays - 最少需要 2^l 形式的整数

c++ - 函数指针如何工作?

language-agnostic - 有什么理由对空指针使用十六进制表示法?

C++ 从文件中读取会阻止任何进一步的写入。为什么?

c++ - 为什么 Windows 不能读取超出 0x1A (EOF) 字符但 Unix 可以?