打印传递给打印函数的向量[关闭]
Posted
技术标签:
【中文标题】打印传递给打印函数的向量[关闭]【英文标题】:Printing a Vector that was passed to a print function [closed] 【发布时间】:2018-10-02 15:09:02 【问题描述】:This is the code that I have written
我在尝试打印向量值时遇到错误,我不知道为什么。
我将数组传递给函数print(&v1)
。
有人可以帮我弄清楚为什么会发生这个错误,以及是否有更好的替代方法来打印出我的函数中的向量元素。
【问题讨论】:
请在问题中包含代码和错误作为文本。另请阅读minimal reproducible example 您对指针和引用有一些误解。我认为这不是一个尝试教授的好地方,您应该选择good book,或者请您的老师再次解释这些概念。 您问题的简单答案是将print
中的v[x]
更改为(*v)[x]
,但我认为这对您的理解没有太大帮助。 (这是一种修复方法,但可能不是最好的修复方法)。
print1
似乎是正确的。为什么要在print
中使用指针?与一些老师试图让你相信的相比,你需要的指点要少得多。
vector<int> *v
-> vector<int> & v
【参考方案1】:
您在print1
中正确使用了->
而不是.
(就像在print
中一样)来操作指向向量的指针。这是因为x->y
等价于(*x).y
,这意味着您在访问它之前正确地取消了指向向量的指针。
[]
除外。在这里,您还必须在使用[]
之前取消引用指针。所以:
cout << (*v)[x] << endl;
(*x)[]
没有像 (*x).y
那样的缩写(也称为“语法糖”),因此您必须手动完成。
错误消息令人困惑,因为在 指针 上使用 []
是有效的 - x[y]
等效于 *(x+y)
,这意味着您正在执行指针算术:您使用 v
作为如果它是一个(C 风格的)向量数组,并且您尝试从这个向量数组中获取 x
th 元素。幸运的是,编译器不知道如何将 <<
和 Vector
与 cout
联系起来 - 但如果可以,代码将编译并执行您(可能)不打算执行的操作。
【讨论】:
以上是关于打印传递给打印函数的向量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅如何传递android的log日志打印方法给到底层算法c代码去调用?