通过地址的优点:
它使我们有功能的改变参数的值,有时它是有用的
因为一个拷贝的说法是没有,它是快速的,即使有大的结构或类使用时。
我们可以从一个函数返回多个值。
通过地址不足:
因为文字的表达没有地址,指针的参数必须是正态变量。
所有值必须检查他们是否有空。试图引用空值将导致崩溃。这是很容易忘记做这个。
因为指针解引用比直接访问值慢,访问参数传递的地址比访问参数通过值传递慢。
你可以看到,通过地址,通过参考有几乎相同的优点和缺点。因为通过参考通常比通过地址安全,通过参考应在大多数情况下,优选。
通过引用传递参数,地址,和价值实际上并没有那么不同
现在你明白通过引用传递参数,地址,之间的基本差异和价值,让我们通过简化复杂的东西。:)
在课上,通过引用传递参数,我们简要地提到,引用通常是通过编译器为指针。因此,唯一真正的差异之间的引用指针和引用的是有一个更清洁更严格的语法。这使得参考更容易和更安全的使用,但也不那么灵活。这也意味着,通过借鉴和通过地址,它们基本上是相同的效率。
这是一个可能会让你大吃一惊。当你通过一个函数的地址,这个地址实际上是按值传递的!因为地址是按值传递的,如果你改变了那个地址的值在函数中,你实际上是不断变化的临时副本。因此,原来的指针地址不会改变!|
这是一个示例程序,说明了这。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
int nFive = 5;
int nSix = 6;
// Function prototype so we can define
// SetToSix below main()
void SetToSix(int *pTempPtr);
int main()
{
using namespace std;
// First we set pPtr to the address of nFive
// Which means *pPtr = 5
int *pPtr = &nFive;
// This will print 5
cout << *pPtr;
// Now we call SetToSix (see function below)
// pTempPtr receives a copy of the address of pPtr
SetToSix(pPtr);
// pPtr is still set to the address of nFive!
// This will print 5
cout << *pPtr;
return 0;
}
// pTempPtr copies the value of pPtr!
void SetToSix(int *pTempPtr)
{
using namespace std;
// This only changes pTempPtr, not pPtr!
pTempPtr = &nSix;
// This will print 6
cout << *pTempPtr;
}