说你有
void foo(int a, int &b, int *c){...}
int main(){
int d=0, e=1, f=2;
foo(d, e, &f);
}
我的理解是函数声明参数必须与参数具有相同的类型。因此 a、b 和 c 前面的“int”是因为 d、e 和 f 都是整数。
但这是否扩展到(也适用于)引用和指针,即&
和*
?我的意思是,如果你有int &b
,是否e
必须已经是一个地址?
我认为确实如此,但现在我认为在阅读此线程后我的概念错了: C++ 函数:& 与星号 ,其中概述的代码几乎就是我上面写的。
在阅读了上面的线程和代码之后,似乎参数中的&
and*
实际上不是“类型限制”的一部分——即它并不意味着 e 必须是地址,或者 f 必须是指针.
见前面我认为参数中的参数名称a, b, c
是严格指定它必须是什么类型
所以你会编写这样的代码:
void foo(int a, int &b, int *c){...}
int main(){
int d=0, e=1, f=2;
foo(d, &e, *f); // wrong
}
相反,似乎&
in 参数实际上采用了传入的变量/对象参数并更改或获取其地址。而*
实际上是作用于 f ( &f
) 的地址,它作为参数传递并检索它的内容。这是正确的吗?
这只是给定的协议/规则&
并*
放置在必须接受的参数中吗?
我已经阅读了许多关于参数中的引用和指针的文章,它们都非常清楚地解释了参数中的&
and*
允许更改传递的变量的值。&
但是,*
当放置在参数中时,它们永远不会深入到实际过程/协议中。
http://www.cplusplus.com/doc/tutorial/functions2/
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
让我知道我在概念上是否正确。谢谢!