【问题标题】:Do references and pointers by default always represent the 0 index? c++默认情况下引用和指针是否总是代表 0 索引? C++
【发布时间】:2014-04-05 21:29:56
【问题描述】:

标题几乎概括了这个问题。但我会添加一些额外的细节。假设您尝试将参数传递给函数,为此参数是向量或数组。当你这样做时:

void printFun(vector<int>& aVec)
{
}
int main()
{
    vector<int> someVec;
    printFun (someVec);
}

是 aVec 中的引用,它位于索引零(或第一个索引);因此,您必须使用索引递增的 aVec[index] 来遍历、打印或修改每个值。

如果您认为有任何其他建议可能对您有所帮助,您需要说出来以更好地理解这一点,我们将不胜感激。

【问题讨论】:

    标签: c++ arrays pointers vector reference


    【解决方案1】:

    是 aVec 中的引用,在索引 0 处获取它

    这个问题没有多大意义。该向量没有任何索引状态。您可以通过传递您选择的索引来访问元素。引用只是对象的别名。它与索引分离。

    编辑:在 cmets 之后,澄清一下:引用是整个向量的别名,而不是向量中任何特定索引处的任何元素的别名。引用与索引无关。

    【讨论】:

    • 如果 someVec 从第一个元素创建别名,然后使用连续的内存地址,您可以使用 aVec[index] 流过元素?
    • @Jcodin 不是第一个元素的别名。它是向量的别名。您可以像在任何其他上下文中使用任何向量一样使用它。
    • 那为什么要引用它呢?如果不需要,您是否必须手动将所有值输入参数?
    • @Jcodin 在这种情况下,引用允许引用在函数之外创建的对象。您可能希望这样做,以便您可以修改对象,或避免制作可能昂贵的副本,或两者兼而有之。
    【解决方案2】:

    在您给出的示例中,引用“aVec”不是对向量中索引的引用,而是对向量本身的引用。

    假设向量有任何元素,你可以像这样在索引 0 处获取对象

    void printFun(vector<int>& aVec)
    {
        //access index 0
        aVec[0] = 0;
    
        //To iterate the vector you can do this
        for( int i = 0; i < aVec.size(); ++i )
        {
            std::cout << aVec[i];
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      如果您将数组传递给函数(即指针),
      它始终准确地指向第一个元素。
      p[0] 始终与 *p 相同

      使用向量指针(这是一个类,其中可能有多个成员之一是一个数组)
      这不能保证。可以,但不必。
      矢量参考是另一回事。它与指针不同。

      【讨论】:

      • 可能归结为关于向量指针的奇怪说法。
      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2011-04-17
      • 2022-08-11
      • 1970-01-01
      • 2014-01-29
      • 2011-09-04
      相关资源
      最近更新 更多