繁体   English   中英

为什么当一个函数接受一个指针时,我们传递的是一个特定变量的地址,而不是一个指针?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM