C++ 在C+中为什么以及在何处使用引用和指针+;
可能重复:C++ 在C+中为什么以及在何处使用引用和指针+;,c++,pointers,reference,C++,Pointers,Reference,可能重复: 我是一个非常新的C/C++语言编程人员,因为我来自C++、java、JavaScript和一点Visual Basic和Python的背景,我很难理解C++中的一些东西。 我已经知道如何使用引用和指针,以及它们的真正含义等,但我不明白为什么以及在哪里使用它们。我知道引用有时是这样使用的: int x = 2; void Square(int &value) { value = value*value; } Square(x); cout << x &
<>我是一个非常新的C/C++语言编程人员,因为我来自C++、java、JavaScript和一点Visual Basic和Python的背景,我很难理解C++中的一些东西。 我已经知道如何使用引用和指针,以及它们的真正含义等,但我不明白为什么以及在哪里使用它们。我知道引用有时是这样使用的:
int x = 2;
void Square(int &value)
{
value = value*value;
}
Square(x);
cout << x << endl;
int x = 2;
int Square(int value)
{
value = value*value;
return value;
}
x = Square(x);
cout << x << endl;
intx=2;
空方块(整数和值)
{
值=值*值;
}
正方形(x);
cout第二个示例将本地复制变量x
(仅在Square
函数中可见)
如果您想确保您的全局x
保持不变,请这样做。但是,它可能非常昂贵(如果您的变量是更大的object/struct)。。。和冗余-签出关键字const第二个示例将本地复制变量x
(仅在Square
函数中可见)
如果您想确保您的全局x
保持不变,请这样做。但是,它可能非常昂贵(如果您的变量是更大的object/struct)。。。和冗余-签出关键字const
将参数作为引用传递意味着您将修改其值(如果对其执行某些操作),而不是修改其副本变量的值。
由于使用了&value,它会更改存储在&value所指地址处的内容
您需要在Squre()中传递&x而不是x
因此x=Squre(&x)
或
Squre&x
相同。将参数作为引用传递意味着要修改其值(如果对其执行某些操作),而不是修改作为其副本的变量的值。
由于使用了&value,它会更改存储在&value所指地址处的内容
您需要在Squre()中传递&x而不是x
因此x=Squre(&x)
或
Squre&x
相同。传递引用有两个主要原因:
- 更改函数中引用的对象的值
- 以避免复制传递的对象的成本
如果您想要第二个好处而不是第一个好处,通常会传递一个const
引用,以避免错误地更改传递的对象
在C++中,指针和引用与两个例外情况大致相同:
- 引用不能指向0(或
nullptr
)
- 引用必须始终指向同一对象
如果你想做这些事情之一,你必须使用一个指针
此外,指针通常指向使用new
在堆中创建的对象,而引用通常指向在堆栈中创建的对象。这意味着指针指向的对象的生存期通常是手动控制的。为了销毁由new
创建的对象,您必须显式调用delete
,但在堆栈中创建的对象的生存期由运行时自动管理(因此它们的名称为“自动变量”)
我不知道这是你需要知道的全部,还是你在寻找更具体的东西。你传递参考资料有两个主要原因:
- 更改函数中引用的对象的值
- 以避免复制传递的对象的成本
如果您想要第二个好处而不是第一个好处,通常会传递一个const
引用,以避免错误地更改传递的对象
在C++中,指针和引用与两个例外情况大致相同:
- 引用不能指向0(或
nullptr
)
- 引用必须始终指向同一对象
如果你想做这些事情之一,你必须使用一个指针
此外,指针通常指向使用new
在堆中创建的对象,而引用通常指向在堆栈中创建的对象。这意味着指针指向的对象的生存期通常是手动控制的。为了销毁由new
创建的对象,您必须显式调用delete
,但在堆栈中创建的对象的生存期由运行时自动管理(因此它们的名称为“自动变量”)
我不知道这是您需要知道的全部,还是您正在寻找更具体的内容。引用只是变量的伪名称。应用于引用的任何操作实际上都会影响所引用的变量
int a = 5;
int &b = a;
b++; // 'a' gets equal to 6
在您的示例中,您返回乘法的结果,但如果您需要更改传递给一个不返回任何结果的函数的变量的值,该怎么办
这就是引用变得方便的时候。指针的行为与此类似,只是指针不是变量的伪名称,而是它的地址。您可以将指向变量的指针传递给函数,取消对它的引用,它将以完全相同的方式影响您的变量。引用只是变量的伪名称。应用于引用的任何操作实际上都会影响所引用的变量
int a = 5;
int &b = a;
b++; // 'a' gets equal to 6
在您的示例中,您返回乘法的结果,但如果您需要更改传递给一个不返回任何结果的函数的变量的值,该怎么办
这就是引用变得方便的时候。指针的行为与此类似,只是指针不是变量的伪名称,而是它的地址。您可以将指向变量的指针传递给函数,取消对它的引用,它将以完全相同的方式影响您的变量。这样的示例在实际中没有什么区别,但与其将整数传递给Square()
,不如设想Square是一个复杂的算法,需要10 GB的数据。使用指针不是更好吗,这样参数就不会
int i;
Int &ref = i;
Int *pointer = &i;