1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include<iostream>
#include<iterator>
#include<vector>
using
namespace
std;
void
Print(
int
*& p){
//&限定必须是可修改的左值
//然后p为指向这个引用的指针
cout << *p << endl;
}
int
main(){
int
a=1;
//Print(&a); 不能传入地址,因为地址不是左值
int
* b = &a;
Print(b);
//传入指针OK
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
void
foo (
void
*&ref_ptr)
{
ref_ptr = 0;
}
int
main ()
{
void
*ptr = (
void
*)1;
foo(ptr);
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
#include <stdio.h>
#include <stdlib.h>
template
<
class
_Tp>
void
Malloc_v1(_Tp *ptr)
{
ptr = (_Tp*)
malloc
(
sizeof
(_Tp));
// Error, memory leak!
}
template
<
class
_Tp>
void
Malloc_v2(_Tp *&ptr)
{
ptr = (_Tp*)
malloc
(
sizeof
(_Tp));
// OK
}
int
main ()
{
int
*p1 = NULL, *p2 = NULL;
Malloc_v1(p1);
Malloc_v2(p2);
printf
(
"p1=%p, p2=%p\n"
, p1, p2);
int
*&p3 = p1;
p3 = (
int
*)
malloc
(
sizeof
(*p3));
printf
(
"p1=%p, p2=%p\n"
, p1, p2);
}
printf
(
"%p\n"
, ptr);
return
0;
}
|