指针和通过引用 c++ 传递
Pointers and pass by reference c++
在我的main中,我调用函数compute_entropy,并给它一个像这样的向量:浮点熵 = h.compute_entropy(input_pic[0], & Symbol_table);
在实现函数本身(以 h.cpp 为单位)中,我不应该更改它采用的参数,即 vector* prob..如何访问 prob 的数据?
float compute_entropy(vector<Symbol>* prob)
{
float ent = 0;
vector<Symbol>* prob;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
{
ent += (prob.at(i).freq) * log2( 1 / (prob.at(i).freq) );
}
}
因为prob
的类型是Vector<Symbol> *
,所以在访问成员之前,您实际上需要先取消引用它。看起来像(*prob).at(i).freq
.
*(A).B
也可以写成A->B
,所以可以写成prob->at(i).freq
,而不是(*prob).at(i).freq
。(有了类似的论点prob.size()
就变成了prob->size()
)
以更清洁的方式
做到这一点 因为你从不改变向量的内容,所以你可以使参数不变。
float compute_entropy(const vector<Symbol>* prob)
现在我们知道指针是邪恶的,让我们用引用替换指针。
float compute_entropy(const vector<Symbol> &prob)
{
float ent = 0;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
{
ent += (prob.at(i).freq) * log2( 1 / (prob.at(i).freq) );
}
}
调用此函数时,如果使用 vector 调用,请从参数中删除&
,如果使用向量指针调用,请使用 *
取消引用它。
vector<Symbol>* prob;
for (int i = 0; i < prob.size(); i++) //GIVES ERROR
.....
因为 prob 是一个指针,所以你需要使用 -> 运算符
for (int i = 0; i < prob->size(); i++)
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 将对象数组的引用传递给函数
- Pybind11:将元组列表从Python传递到C++
- std::向量与传递值的动态数组
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- Ctypes wstring通过引用传递
- C++数组传递给大小为的函数
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++/传递值导致#DEN
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何将参数传递给正在使用模板的类
- 将重载的成员函数传递给函数模板
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 通过JNI传递数据数组的最快方法是什么
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 通过网络、跨平台传递std::变体是否安全
- 在C++中传递给函数时,为什么要指定数组大小作为参数