![](/img/trans.png)
[英]When we pass by reference, why do we put a variable instead of address(pointer), when calling the function?
[英]why when a function takes a pointer, then we pass the address of a specific variable, and not a pointer?
例如 :
void foo(int *ptr) {
some code///
}
int main() {
int x = 5;
foo(&x);
}
但不是这个:
void foo(int *ptr) {
some code///
}
int main() {
int x = 5;
int *ptr = &x
foo(ptr);
}
我读过关于这个的文章,但所有说“我们正在传递地址”的东西,但不是指针,我不明白为什么,请告诉我
下面的代码片段很好(合法/有效),因为变量ptr
是一个指针,意味着它保存了一个 int 的地址(在这种情况下)。 这正是foo
期望的参数类型。
void foo(int *ptr) {
// some code///
}
int main() {
int x = 5;
int *ptr = &x;//ptr is a pointer to an int
foo(ptr);//this works because foo expects a pointer to an int
}
你的例子(修改后)
int *ptr = &x
foo(ptr);
完全有效并且与foo(&x)
完全相同。 唯一的区别是您声明了一个类型为int*
的额外变量。 编译器通常会将其优化掉,因此两者之间没有真正的区别。
指针保存变量的内存地址。 如果一个函数接受一个指针,你实际上是在传递它所指向的变量的地址,所以传递一个指针实际上是在传递一个地址。 这两种情况都是合法的,做同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.