- 引用的本质就是两个变量名的地址是同一块内存,可以改变该地址指向的内容
- 引用指针可以改变指针指向的地址(因为取地址就是指针变量的地址,地址改变,原指针指向的地址也变了),也可以改变指针指向的内容
- 左值引用与右值引用
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 }