gpt4 book ai didi

c++ - C++ 中的指针参数接收地址?

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:57 25 4
gpt4 key购买 nike

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;
}

我的主要问题是:为什么接收地址参数的函数需要指针参数来接收地址?

最佳答案

通过使用按引用传递的参数,您可以强制函数不复制参数本身的值,而是使用您提供的实际变量。因此,为了更清楚地了解,请参见下文:

void function( int number )
{
cout << number;
}

function( myInt ); // function will copy myInt, into its local variables stack

但是,通过使用引用传递方法,就像这样:

void function ( int & number )
{
cout << number
}

function( myInt ); // function will not copy myInt into its local variables stack, instead, it will use the already existent myInt variable.

编译器处理指针传递参数和引用传递参数的方式没有区别。相反,您的函数调用将如下所示:

void function_p( int *number )
{
cout << *number;
}

void function_r( int & number )
{
cout << number;
}

// and the calls

function_p( &myInt ); // it is required to use address-of operator here
function_r( myInt ); // the effect will be the same, but with less effort in writing that address-of operator

在C++11中,程序员开始使用pass-by-reference方法,一般来说,通常是因为它有一个更容易编写的"template"。


为了完成对您问题的回答,*& 运算符仅引用参数的类型,因此它们创建复合类型。复合类型是根据另一种类型定义的类型。 C++ 有几种复合类型,其中两种是引用和指针。

你可以理解它们只影响变量的类型(在我们的例子中,一个参数),通过以适当的方式编写它们:

int* p1; // we will read this: pointer p1 points to an int
int* p2 = &var1; // we read this: pointer p2 points to int variable var1

int var1 = 12;
int& ref1 = var1; // and we read this: ref1 is a reference to var1

您通常可以认为引用代表同一 block 内存的不同。

关于c++ - C++ 中的指针参数接收地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22217853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com