我对在 C++ 中将指针作为参数传递有什么误解?

What do I misunderstand about passing a pointer as a parameter in C++?

我已经用 C++ 编写了几百行的长程序。这是我的第一个真正的程序,我正在尝试扩展它的功能集。

但是,我对将指针作为参数传递感到困惑。

我认为您可以只使用一个参数作为指向特定类型对象的指针,但我的代码给出了以下错误:

函数调用:

if (count(dvector.begin(),dvector.end(), "TO") > 0 ) {

    vector<string> dvector;

    map<string, vector<string> > params_map ;

    dvector = change_named_params(dvector, params_map);
}

函数签名:

vector<string> change_named_params(vector<string> to_check,
                                   map< string, vector<string> > * params_map) {/* body */}

错误信息:

../Stack_interface.cc: In function ‘void
execute_user_function(std::string)’: 
../Stack_interface.cc:451:52:
error: cannot convert ‘std::map<std::basic_string<char>,
std::vector<std::basic_string<char> > >’ to
‘std::map<std::basic_string<char>, std::vector<std::basic_string<char>
> >*’ for argument ‘2’ to ‘std::vector<std::basic_string<char> > change_named_params(std::vector<std::basic_string<char> >,
std::map<std::basic_string<char>, std::vector<std::basic_string<char>
> >*)’    dvector = change_named_params(dvector, params_map);}

我搞砸了什么?

你的函数 change_named_params 接受一个指向 map<string, vector<string>> 的指针,而你只是给它地图。而是像 change_named_params(dvector, &params_map); 这样称呼它。前面的&会得到变量的内存地址

另一种解决方案是采用引用而不是指针。 (使您的函数成为 return-type name(type& name) 将使其接收对 type 的引用,但您可以像平常一样访问它。

不要使用指针。相反,使用这样的引用:

vector<string> change_named_params(vector<string> & to_check, map< string, vector<string> > & params_map)

如果您不需要修改函数内的参数,请将它们设为 const 引用。

引用,如指针,允许您将对象传递给函数而无需复制它们。但是引用允许比指针更简单的语法。