c++之复合类型

  因为昨天看了c++ primer里面介绍复合类型的部分,觉得写得很透彻,所有决定今天来记录一下自己的理解。

  常见的复合类型主要是引用和指针,对应的声明修饰符分别是 & 和 * 。其实所谓复合类型就是一个基本类型加上一组修饰符(这句话后面慢慢理解)。

  • 引用

    在使用引用的时候,一般只需要记住它是对象的别名就好了(为什么说是一般,下面会介绍decltype())。还有一点需要记住的就是引用不是对象,所有没有引用的引用。

    1. 引用的定义   

1 int i = 0; 
2 int &ci = i; //ci 是 i 的别名,访问 ci 就是访问 i ,修改 ci 就是 修改 i ,用 ci 就是用 i

     上面的定义指出了: ci 的基本类型是int,声明修饰符是&,所以它就是一个int型的引用。其实相当于就是一个声明符就是一个“的”(等看完声明符,再解释这句话)。

    这里有一点需要注意的是,一般初始化引用不能用字面值(什么是字面值?就是想23,56这样的数字,‘’123‘这样的字符串常量)。

1 int & m = 32;     //错误,后面会讲为什么
2 int *&n = “12”;    //错误,原因跟上面一样,其实就是非常量的引用 引用了 常量

 

  • 指针

      想学好指针,只需要分清 *p、p 、&p 各自代表的意思和值就好了(&p的值一般来说只有看到定义之后结合栈才会知道,有兴趣去看看计算机原理,这里它的值不做要求,

    知道含义就可以了)。指针出错往往就是这个分不清跟野指针。          

    1. 指针的定义

1 int i;
2 int *p = &i; //指针就是保存对象地址的变量

    这里就不介绍 * 和 & 作为操作符的用法了。* 和 & 可以用作操作符,也可以是声明修饰符,具体是哪种情况需要根据上下文环境确定首先 p 的基本类型是int型,声明修饰符 * 代表指针,所以

   p 是一个int型的指针。对这句话:一个声明符就是一个“的”,有没有一点感觉了?下面接着看:

1 char *s = "adb";      //s是一个char型的指针
2 char *&si = s;         //si是一个char型的指针的引用

    首先 s 就不说了,跟 p 是一样的。我们来看 si 的基本类型还是char型,第一个修饰符 * 代表指针,第二个修饰符 & 代表引用,所以 si 就是char型的指针的引用。有没有发现还有一句话,也

  在这里体现了,就是“复合类型就是一个基本类型加上一组修饰符”,si 就是一个很好的列子。还有就是指针的指针也可以这样分析。

 

  • 常X const

  到这里,基本的复合类型我觉得就ok了。这里主要在介绍一个限定符--const。限定符const就是限定这个变量可以执行的操作(+、-、*、/、++之类)。

    1. 定义常量

1 const int i = 0//定义了一个常量 i
2 i=9//错误,不能修改常量值

    所谓常量就是说,本身值不能修改,一改就会出错。所以常量在定义的时候一定要初始化,否则就会出错。这里初始化,不一定要用字面值,可以用变量初始化 int i = 0; const int i = a; 

  这样也是可以的。

    2. const 引用

    用弄清这一点,应该只用记住两点就可以了:首先非const的引用 只能引用 非const的变量(也就是非不引常),或者是用非const的对象、引用初始化;其次const引用 可以引用 非const对象、

  非const引用、const变量(也就是说所有const type声明的变量)、字面值,可以用以上变量、引用、字面值来初始化。

1 int i = 0;                 //正确
2 const int j = 0;        //正确
3 int &m = i;              //正确
4 const int &n = j;       //正确  
5 int &k = n                //错误,非不引常   

 

   这里有一点指定说一下就是const引用 引用的变量是可以修改的,只是不能通过该引用自身修改。有点绕,来看个具体的例子:

int i = 0const int &bi = i;
int &ci = i;                  // bi 和 ci 同时引用了i;
bi = 8;                        //错误,不能改
ci = 7//正确

  正确的代码修改后,i 和 bi 和 ci 的值都是7;

  • 指针和const

  在说这个之前,我还是要提一下刚刚体会的那两句话,可能会帮助理解。

  还有一点要明确,const除了是限定符,也可以是修饰符(不知道对不对,但是这样好理解)。

  清楚了这两点之后,直接来看一个最复杂的例子(主要是我没耐心了...哈哈哈)

const double i = 2.2;
const double *const ci = i;

    首先来看 ci 的开头不是一个基本类型,而是const限定符,表示这个指针指向一个const变量(常量),基本类型是一个被const限定的double型(也就是不能改的double型--double常量型),

  第一个限定修饰符 * 代表指针,第二个限定修饰符const代表常量,所以 ci 就是一个const double型的指针常量。简单来说就是第一个const表示指向常量(通常这种指针可以说成是底层const),

  第二个const表示这个指针是一个常量,其中存放的地址值不能改。

 

  差不多就这些了,其他的可以上机自己实现理解下,不能理解的话,评论区走一走。

原文链接: https://www.cnblogs.com/hml-xxbj/p/9789209.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++之复合类型

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/283156

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午6:55
下一篇 2023年2月15日 上午6:56

相关推荐