例如:
void foo(int *ptr) {
some code///
}
int main() {
int x = 5;
foo(&x);
}
而不是this:
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*
类型的额外变量。编译器通常会将其优化掉,因此两者之间没有真正的区别。
指针保存变量的内存地址。如果一个函数接受一个指针,你实际上是在传递它所指向的变量的地址,所以传递一个指针实际上是在传递一个地址。这两种情况都是合法的,并且做同样的事情。