• 引用


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

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

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

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

    有引用指针的引用(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;}
  • 相关阅读:
    iOS objc_msgSend 报错解决方案
    不再以讹传讹,GET和POST的真正区别
    HTTP Get请求URL最大长度
    [转]浅论ViewController的加载 -- 解决 viewDidLoad 被提前加载的问题(pushViewController 前执行)
    ASIHTTPRequest-断点续传需要原网站支持!
    iOS关于error can't allocate region的一点发现
    Xcode 5.1.1 与 Xcode 6.0.1 的共存之路(建议大家在升级Xcode 6.0.1 的时候保留Xcode 5.1.1)
    监测uitableview 向上滑动和向下滑动的事件
    Xcode5和6共存时,如何发布应用到商店
    利用MPMoviePlayerViewController 播放视频 iOS
  • 原文地址:https://www.cnblogs.com/day-up/p/5114709.html
Copyright © 2020-2023  润新知