我知道,如果我们在C ++中定义一个函数,我们可以传递指针作为参数。例如,int function(int * a){//}。这样做时,我们可以使用指针(a)和&和*运算符,这样,能够修改作为参数传递的原始变量。
后者也是通过引用传递参数的目的。但是,它有点不同。当我们调用一个声明如下的函数:int function(int& a)时,int变量必须作为参数传递,而不是像前一种情况那样传递指针。因此,在第二个函数中,我们使用参数a normal way(作为int),但原始值(在调用函数的范围内)可以更改。
很多人告诉我,这是因为,当通过引用使用传递参数时,实际上,我们传递的是指针而不是值。这是真的吗?还有其他解释吗?第一个和第二个函数有什么区别?我非常感谢你的帮助。
答案 0 :(得分:3)
有两种基本方法可以将某些内容传递给函数。您可以将某些内容的值传递给函数,并且可以将某些内容的引用传递给函数。关键的区别在于,当您传递某些内容的值时,您实际上是在创建一个具有相同值的新副本。
在C和C ++中,指针是包含一个值的数据类型,该值是其他内容的地址。与非指针一样,指针也可以通过值或C ++中的引用传递。
从您的问题中不清楚您要比较的是什么,但如果您将指针与通过引用进行比较,那么除了作为问题的两种不同解决方案之外,这并不是一个明智的比较。在C ++中传递指针时,还必须选择是按值还是按引用传递该指针。
在某种程度上,将指针传递给某个值与通过引用传递该东西大致相当。您可以使用仅支持按值传递的语言,并且可以通过按值传递指针来“伪造”通过引用传递。有些语言只支持通过引用传递,并且可以通过将引用传递给副本来“伪造”传递值。