我无法理解的一件事是何时在函数中使用某些类型的指针作为参数。
考虑一个接收整数作为参数的函数,并将该值加倍。其功能可能是:
void doubleTheValue(int *myNum)
{
*myNum *= 2;
}
int main()
{
int number = 2;
doubleTheValue(&number);
// prints 4
cout << number << endl;
return 0;
}
这对我有意义。该函数接收一个整数指针,并传入对变量'number'的引用,并更改该值。现在,令我困惑的是,如果你这样做了:
void doubleTheValue(int &myNum)
{
myNum *= 2;
}
int main()
{
int number = 2;
doubleTheValue(number);
// this also prints 4
cout << number << endl;
return 0;
}
请注意该函数的参数不同。这究竟是在内部做什么,为什么你会在上述方法中使用它?
答案 0 :(得分:2)
这在内部究竟是做什么的,为什么你会在上述方法中使用它?
&
引用将被读作指针引用参数的等价,但
*
来访问函数实现中的值/成员void
),或者从函数内部引发异常。这通常适用于两种变体。答案 1 :(得分:2)
这在内部究竟是做什么的,为什么你会在上述方法中使用它呢?
在你的第一个例子中:
void doubleTheValue(int *myNum)
{
*myNum *= 2;
}
您正在传递指向该函数的指针。指针具有实现定义的大小。例如,在64位体系结构中,指针的大小可能为8字节。在这种情况下(通常,对于基本类型),传递指针而不是引用会产生反效果(参见下一段)。
在你的第二个例子中:
void doubleTheValue(int &myNum)
{
myNum *= 2;
}
您正在传递对该函数的引用。主要区别在于甚至根本不需要引用来占用任何内存。 myNum
和原始变量只能在内存中共享同一个对象。
对于引用和指针之间的其他差异,我建议您查看this question。但一般的经验法则是,尽可能使用引用。您将发现在特定情况下需要使用指针(例如,当您想要接受空值时)。
答案 2 :(得分:1)
您应该了解指针和引用之间的区别。在许多情况下,我们无法使用我们可以使用指针进行的引用来做某事。尽管引用不需要任何内存,但它们只是内存位置的标记,但与指针相比,指针远比引用更强大。 主要区别是:
1-指针可以重新分配任意次数,而初始化后无法重新分配引用。
2-A指针可以指向NULL,而引用永远不会指向NULL。
3 - 您无法使用指针
获取引用的地址4 - 没有“参考算术”(但您可以获取参考指向的对象的地址并对其进行指针算术,如&amp; obj + 5)
答案 3 :(得分:0)
来自OP,原帖子的评论:
这两者都没有真正对应用程序有任何用处,也没有解释为什么你会使用其中一个而不是我很好奇的。
我的印象是人们大多使用引用,因为它们使代码看起来更干净,因此没有很多*
和&
浮动。