引用

引用即为变量的别名,与变量指向同一个地址,且值一改都改.

在实现上,引用用指针来实现的。

引用在定义时必须赋予初值,有所依附。且,不能让一个引用引用引用。

引用不是实体,引用本身并不占用内存空间。

有引用指针的引用(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;}

 

posted @ 2016-01-08 21:16  amberblue  阅读(146)  评论(0编辑  收藏  举报