引用
引用即为变量的别名,与变量指向同一个地址,且值一改都改.
在实现上,引用用指针来实现的。
引用在定义时必须赋予初值,有所依附。且,不能让一个引用引用引用。
引用不是实体,引用本身并不占用内存空间。
有引用指针的引用(int * & r=p),没有指向引用的指针(int &* =&p);有数组引用(int (&ai)[n]=array_name),无引用数组
//引用定义 /*#include<iostream> using namespace std; int main() { int a = 100; int & b = a; int & c = b; cout << &a << ' ' << &b << ' ' << &c << endl;//指向地址相同 cout << a << ' ' << b << ' ' << c << endl; a = 200; cout << a << ' ' << b << ' ' << c << endl;//值都变 return 0;}*/ //引用使用,通过修改形参值 改变实参 #include <iostream> using namespace std; void swap1 (int a , int b)//值传递,局部变量 { int t = 0; t = a; a = b; b = t; } void swap2 (int *a , int *b)//地址传递 { int t = 0; t = *a; *a = *b; *b = t; } void swap3 (int & a, int & b)// { int t = 0; t = a; a = b; b = t; } void swap4(const char * a , const char * b)//常量指针,交换指针 { const char *t = a; a = b; b = t; } void swap5 (const char **a, const char ** b)//二级指针,交换地址 { const char * t= *a; *a = * b; * b = t; } void swap6(const char *&a, const char *&b) { const char * t = a; a = b; b = t; } struct Student { char name[128]; int age; char summary[10240]; }; void print (const Student &s)//加const,保证数据不会被乱改 { cout << "姓名: " << s.name << ' ' << "年龄: " << s.age << ' ' << "简历: " << s.summary << endl; } void foo (const int & i) { cout << " 常引用可以接收常属性的变量 " << i << endl; } int main () { int a = 1, b = 2; cout << "原始值: " << "a = " << a << ' ' << "b = " << b << endl; swap1( a, b ); cout << "交换1: " << "a = " << a <<' ' << "b = " << b << endl; swap2 ( &a ,&b ); cout << "交换2: " << "a = " << a << ' ' << "b = " << b << endl; swap3 ( a ,b ); cout << "交换3: " << "a = " << a << ' ' << "b = " << b << endl; ///////////交换字符串值 const char * x = "hello"; const char * y = "world"; cout << "原始值: " << "x = " << x << ' ' << "y = " << y << endl; swap4(x,y); cout << "交换4: " << "x = " << x << ' ' << "y = " << y << endl; swap5(&x,&y); cout << "交换6: " << "x = " << x << ' ' << "y = " << y << endl; swap6(x,y); cout << "交换6: " << "x = " << x << ' ' << "y = " << y << endl; //const 引用 Student s = {"张飞" , 24 , "自我介绍"}; print (s); int i = 10; foo(i); //返回值的类型是指接收函数返回值的临时变量的类型 //int i = func (x) return 0;}