【发布时间】:2014-03-06 07:26:46
【问题描述】:
int y=5;
int *yPtr = nullptr;
yPtr = &y;
我知道指针存储的是 y 的地址。并调用 *yPtr 取消引用 y。
如果我调用了 void 函数:
int main()
{
int number = 5;
function( &number );
}
void function( int *nPtr)
{
*nPtr = *nPtr * *nPtr;
}
如果函数将指针作为参数,那么函数调用如何使用地址? 我知道 nPtr 存储地址,但为什么不能将其定义为。
void functions (int &ref)
{
ref = ref * ref;
}
我的主要问题是:为什么接收地址参数的函数需要指针参数来接收地址?
【问题讨论】:
-
我想这就是标准的编写方式。尽管引用主要用作指针,但您不会使用地址初始化它们,而是使用变量的值初始化它们。编译器可能在这两种情况下都会做同样的事情。
-
所以你问为什么你需要显式传递一个地址,而不是编译器隐含地为你做这件事,就像它在传递引用的情况下所做的那样?
-
我想知道为什么函数传递一个地址参数但有一个指针参数。
-
因为指针持有地址...回想一下,指针的行为与任何其他普通类型完全一样:当我们复制指针时,指针的值也会被复制。复制后,两个指针是不同的。
-
我想我知道我为什么感到困惑了。因为我认为该函数正在分配 *nPtr = &number,而不是像顶部的声明那样分配 nPtr = &number。哪个是对的?
标签: c++ pointers address-operator