【问题标题】:How to dereference an array element (C++) [closed]如何取消引用数组元素(C++)[关闭]
【发布时间】:2014-11-04 17:24:49
【问题描述】:

我想使用变量创建一个特定大小的数组,但据称唯一的方法是使用指针。

int size = 5;
string* myArray = new string[size];

我现在想将这个数组中的一个元素分配给另一个变量,我相信这只能通过取消引用来工作。以下代码行不起作用。我该如何解决?

string line;

myArray[0] = "Hello";
line = *myArray[0];

编辑:

我只是想澄清一点:使用普通的“myArray[0]”代码也不起作用。它可以编译,但会导致崩溃。下面是一些关于我想要做什么的更具体的代码。

void MyClass::setLine(string line)
{
    myLine = line; /*This is a private variable in MyClass*/
}

///////////////

MyClass* elements = new MyClass[size];

elements[0].setLine(myArray[0]);

我想将数组元素分配给类中的私有变量,但是当我尝试将值分配给私有变量时程序崩溃。

【问题讨论】:

  • line = myArray[0]; 我强烈建议你改用vector<string> myArray(size);,因为它会删除自己的内存。
  • ...或者如果您有固定大小,请改用std::array<std::string,5>
  • 您可能会说“出现编译错误”并粘贴错误消息,而不是说“不起作用”。对于这个简单的问题,它并不重要,但它通常是一种有用的做法。
  • myArray[0] 已经是取消引用了
  • 您似乎有 2 个数组,其中一个有问题... 稍微调试一下以找出哪个数组,然后提出一个新问题。此外,3 人建议将指针替换为 std::vector,1 人建议将指针替换为 std::array。这些都是很好的建议...

标签: c++ arrays pointers element dereference


【解决方案1】:

如果您在编译时知道大小,则可以使用普通数组。如果你只知道运行时的大小,你仍然可以使用std::vector,这比手动分配要容易得多。

无论如何,如果您真的想了解数组管理的指针,请记住索引运算符相当于加法和取消引用,即ar[i]*(ar + i) 相同。换句话说,索引只是在偏移处取消引用。

因此,不需要额外的取消引用。只需将星号放在失败的行中即可。

【讨论】:

    【解决方案2】:

    有效代码如下所示

    string line;
    
    myArray[0] = "Hello";
    line = myArray[0];
    

    顺便说一句,如果您要在集合中添加或删除元素,您可以使用 std::vector 类而不是数组。

    例如

    std::vector<std::string> myArray;
    myArrray.reserve( 5 );
    
    myArray.push_back( "Hello" );
    
    line = myArray[0];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2013-09-14
      • 2012-02-27
      • 2016-07-06
      • 2021-04-03
      • 2013-02-21
      • 2021-09-08
      相关资源
      最近更新 更多