- 引用的本质就是两个变量名的地址是同一块内存,可以改变该地址指向的内容
- 引用指针可以改变指针指向的地址(因为取地址就是指针变量的地址,地址改变,原指针指向的地址也变了),也可以改变指针指向的内容
- 左值引用与右值引用
1 //左值引用与右值引用 2 void main1() 3 { 4 int a(4); 5 int *p(new int(5)); 6 cout << a << endl; 7 cout << *p << endl; 8 //右值引用 9 int &&rra(move(a));//右值引用,有内存实体就直接引用,没有就开辟内存 10 rra = 1; 11 cout << a << endl; 12 13 //左值引用 14 int &la(a); 15 int *&lp(p); 16 la = 3; 17 *lp = 12; 18 cout << a << endl; 19 cout << *p << endl; 20 21 22 cin.get(); 23 }
- 一级指针引用改变指针的指向
1 //引用一级指针 2 int num1 = 10; 3 int num2 = 20; 4 //C++能用引用就别用指针 5 //引用可以改变指针的地址也可以改变指针指向的地址或值 6 void change(int *&rp) 7 { 8 rp = &num2; 9 } 10 11 12 void main2() 13 { 14 int *p = &num1; 15 change(p); 16 }
- 引用二级指针
1 //引用二级指针 2 int data1 = 10; 3 int data2 = 20; 4 int *p = &data1; 5 int *p2 = &data2; 6 7 //引用传递的是变量的地址 8 void changeit(int **&rpp) 9 { 10 //改变二级指针存储的地址 11 //*rpp = &data2; 12 //改变二级指针指向的地址 13 rpp = &p2; 14 }
- 返回值是引用指针
1 //返回的指针类型为char *类型的引用 2 char * & get() 3 { 4 char *p = "hello"; 5 printf("&p=%p,,p=%p\n", &p, p); 6 return p; 7 } 8 9 void main() 10 { 11 char *&rp = get();//rp变量的地址就是p的地址,rp是存储的地址 12 //当rp变量的地址被回收,rp存储的地址就不能被读取 13 printf("%p\n", &rp); 14 char *newp = get();//newp的地址是新创建的,并指向p,不会被回收 15 printf("%p\n", &newp); 16 cin.get(); 17 }