可能重复:
Why use pointers?
Passing a modifiable parameter to c++ function
为什么我想要指针参数?我能看到的唯一原因是小功能试图减少混淆和更小的内存占用。
答案 0 :(得分:5)
在Passing a modifiable parameter to c++ function中我回答了何时使用引用而不是指针。
相反,当满足以下任何条件时,更喜欢指向引用的指针:
当指向的东西应该被突变时,有些人也更喜欢指针,说const引用和非const引用之间的区别对读者来说不够明显。
答案 1 :(得分:4)
答案 2 :(得分:3)
指针是接受C风格字符串和数组的唯一方法。它们也是在多个线程之间共享数据的唯一方法(除了全局对象之外,还有......)。
答案 3 :(得分:2)
将指针作为参数有很多原因。一个主要原因是多态性。指针可以指向基类对象或子类,并相应地调用该对象上的方法。
我推荐Koenig的 Accelerated C ++ ,他通过指针(和引用)很好地解释了多态在C ++中是如何工作的。
答案 4 :(得分:2)
有两个原因:
32位平台上的指针只有4个字节。如果传递给函数的数据超过4个字节,则通过引用而不是按值传递结构来节省一些调用时间。 (您可能稍后会在间接成本中放弃这种性能优势,但这就是性能分析的用武之地。)
您可以传递一个非常量指针,让函数修改传递的数据。
答案 5 :(得分:1)
除了指针参数的标准用法(其他人已经说过)之外,我能想到的一个原因是实现回调。您可以使用一个接受函数指针作为参数的函数。
答案 6 :(得分:1)
我认为你的意思与参考相反?你可以用指针做的事情是将它们设置为NULL,这允许你指定一个未初始化的状态。这有时是有用的,但是必然的结果是,如果你想强制执行NULL不能传递给你的函数,那么使用引用就可以清楚了。
答案 7 :(得分:1)
如果将简单变量传递给函数,该函数会创建该变量的副本,以便在函数范围内使用。当函数完成执行时,将不会显示对传递的简单变量所做的任何更改。这是因为变量本身在函数中从未被改变过只有它的副本。将指向变量的指针传递给函数可以解决这个问题。
int some_function(int num) {
return num++;
}
int num1 = 15;
std::cout << some_function(num1) << std::endl; //prints 16
std::cout << num1 << std::endl; //prints 15
答案 8 :(得分:0)
IMO,指针在很多C ++文档中都比它们实际上要重要得多,而引用很少在介绍性材料中讨论(除了参数方面的简短提及)。
虽然指针肯定有价值(数组,字符串,动态内存等),但是很多功能可以通过引用更简单地实现。我经常使用指针参数的唯一一次是当我使用内置有这种用途的第三方库时。
使用引用删除了直接类参数中隐含的复制分配步骤,同时不需要反复使用无效指针解除引用(使用*或 - &gt;)。此外,学习使用引用对于运算符重载等应用程序非常重要,这对于代码的精确控制至关重要。
答案 9 :(得分:0)
很多原因,但引用应该是“标准”。仅在引用不起作用时才使用指针。一些利弊:
指针可用于传递大型阵列而不会占用大量内存
在泛型类型的情况下, 编译器优化可以运行 更好的参考,因为 编译器有更多关于使用的信息 类型
引用可以说是代码 更具可读性,更符合java 和c#因此更好的可读性 其他类型的开发者
引用实际上没有通过 整个对象,而是一个指针 但是,更多的类型信息 可供编译器使用。
答案 10 :(得分:0)
指针和引用之间还有一个区别: -pointer可以是NULL指针 - 参考引用总是一个真实的对象[f(T&amp; v); F(NULL);不是真的好主意]