c++ primer学习-引用类型和指针

1.引用类型

c++11新增加的一种引用,引用为对象起了另一个名字。程序把引用和它的初始值绑定在一起,不是将初始值拷贝给引用。一旦初始化完成,引用将和他的初始值绑定。引用必须初始化,定义引用为&a ,a为变量。
    int i=1024;
    int &ref1 = i;// ref1是变量i的引用, ref1指向 i (i 的名一个名字)
    //int &ref2;//报错 没有初始化
    ref1 = 2; //把2赋值给ref1指向的对象,即 i=1024;
    std::cout<< i ; //i=2
    int ii = ref1; //ii
     std::cout<< i; //ii=2;
    int &ref3=ref1;
     std::cout<< ref3; //ref3=2
    int j= ref1;
    std::cout<< j;//j=2;
    
//    int &ref4=0;//错误 引用类型的初始值必须是对象
    double d = 3.14;
//    int &ref5 = d; //引用类型的初始值必须是int型对象
    

2.指针类型

指针 是指向 另一种类型的复合类型。与引用类似,指针也实现了对其他对象的简介访问。指针本身是对象,允许对指针赋值和拷贝。指针不必在定义时赋初始值,如果在块作用域内定义的指针如果没有初始化,也将拥有一个不确定的值。定义指针为*a ,其中a是变量名,如果要定义多个指针变量,每个变量前都得有*。

 *ip1,*ip2;//ip1和ip2都是指向int型对象的指针
 dp1,*dp2;//dp1是double型对象,dp2是指向double型对象的指针;

获得对象的地址需要用到取地址符 &;

    double dval;
    double *pd = &dval;
    double *pd2 = pd;
//    int *pi = pd;//错误 类型不匹配
//    pi = &dval;//错误 试图把double型对象的地址赋值给int型指针
    

利用指针访问对象 需要用到解引用符 * 来访问

    int ival = 1024;
    int *ip = &ival;
    std::cout<< ip; //ip存储的地址 即ival的地址
    std::cout<< *ip; //ip所指向对象的值 1024
    *ip = 10; //p为ival赋值 即 ival = 10
    std::cout<<*ip;//10
    std::cout<<ival;//10

指向指针的指针 **p

    int i = 1024;
    int *p = &i;//p指向一个int型的对象
    int **pp = &p;//pp指向一个int型的指针
    
    std::cout<<pp;
    std::cout<<*pp;
    std::cout<<**pp;

指向指针的引用 *&rp

    int i = 1024;
    int *p;//p是一个int型的指针
    int *&pr = p;//pr是一个对指针p的引用
    pr = &i;//pr引用了一个指针,因此给pr赋值&i就是令p指向i;
    std::cout<<i;
    std::cout<<"\n";
    std::cout<<*p;
    std::cout<<"\n";
    std::cout<<pr;
    std::cout<<"\n";
    std::cout<<*pr;
    *pr = 10;//解引用pr得到i,也就是p指向的对象,将i的值改为10;
    std::cout<<"\n---------\n";
    std::cout<<i;
    std::cout<<"\n";
    std::cout<<*p;
    std::cout<<"\n";
    std::cout<<pr;
    std::cout<<"\n";
    std::cout<<*pr;



3. & 与 * 的多重含义

    int i = 1024;
    int &ir = i; //&紧随类型名出现,因此是声明的一部分,ir 是一个引用
    int *p;//*紧随类型名出现,因此是声明的一部分,p是一个指针
    p=&i;//&出现在表达式中,是一个取址符
    *p=i;//*出现在表达式中,是一个解引用符
    int &r2 = *p;//&是声明的一部分,*是一个解引用符
    






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值