C++Primer(第5版)学习笔记:第2章-变量和基本类型

前言

个人学习笔记,只记录了不熟悉不明确或平时容易出错的重点难点,并加以个人的理解,如有错误敬请谅解。详细内容参见《C++ Primer 中文版 (第5版)》
在这里插入图片描述

本章目录

在这里插入图片描述
在这里插入图片描述

笔记

  1. 键盘输入文件结束符:
    1)Windows:Ctrl + Z,然后按Enter
    2)UNIX:Ctrl + D

  2. 字符型分为char,unsigned char, signed char,其中char和signed char不一样,char表现为带符号和无符号的其中一种,具体取决于编译器

  3. 一个算数表达式既有无符号又有int,则int会自动转换为无符号

  4. 泛化的转义序列:
    \x 跟1个或多个16进制数字
    \ 跟至多3个8进制数字

  5. 在这里插入图片描述

  6. 对象:一块能存储数据并具有某种类型的内存空间

  7. 初始化和赋值:
    a.初始化:创建变量时给一个初始值
    b.赋值:将当前的值擦除,赋新值

  8. C++11可以用花括号进行列表初始化:
    在这里插入图片描述
    在这里插入图片描述

  9. C++是静态类型语言,指在编译阶段检查类型

  10. 在这里插入图片描述

  11. 引用就是给对象起了一个别名,所以引用不是对象,不能建立引用的引用

  12. 指针是对象,存放某个对象的地址

  13. *号助记:
    1). int a=1; int *p = &a;( *:定义,是个标志,声明的一部分)
    2). int b = *p;( *:解引用符,是运算符)

  14. 同理,&也是声明的一部分或者取地址运算符

  15. =赋值改变的永远是等号左边的值,助记:
    1).int *p,a=1;
    2).p = 0; //指针p为空
    3).p = &a; //指针p指向a(给p赋值a的地址)
    4).*p = 0; //a赋值为0

  16. 合法但不易理解,建议直接写int *p1,p2;( *号挨着p而不是int,这样写不容易被误解, 因为 *号只作用于后面最近的一个变量上)
    在这里插入图片描述

  17. *&r,看&,所以是引用
    在这里插入图片描述

  18. const变量必须初始化,默认状态下只在该文件内有效,如果想在多个文件内使用,则定义和声明都需要在前面写extern;

  19. const int &r1 = r;常量引用在这里插入图片描述

  20. 从右往左读:
    1)curErr,离他最近const,所以他是一个常量,常量的类型是一个Int型的指针
    2)pip,离他最近const,所以他是一个常量,常量的类型是一个double型的指向常量的一个指针
    3)前面的const叫底层const,后面的叫顶层const
    在这里插入图片描述

  21. 顶层const:指针本身是常量,不可变

  22. 底层const,指针指向一个常量,指针本身可变,但不可通过指针修改指向的常量

  23. 三种注意区分:
    1)const int *p = &a; 指针p指向常量a,底层const,允许改变p,但不允许通过p改变a*
    2)int *const p = &a; 指针p是一个常量指针,顶层const,不允许改变p,但能通过p改变a*
    3)const int *const p = &a; 指针p是一个常量指针,指向常量a,不允许改变p,也不允许通过p改变a,左边的叫底层const,右边叫顶层const*

  24. 非常量可以转换成常量,反之不可

  25. 在这里插入图片描述在这里插入图片描述

  26. 常量表达式是指在编译过程中就能得到计算结果的表达式

  27. constexpr常量表达式,C++11新增在这里插入图片描述

  28. constexpr将他所定义的对象置为了顶层const,因此下面1)和2)的表示等价

1constexpr int i = 42;        constexpr const int *p = &i;
2const int i = 42;       	 const int *const p = &i;
  1. 类型别名:(两种方式:typedef和using)
    1) typedef double wages; typedef wages base, *p;(p是double的别名,等同于typedef double p;)
    2)using SI = salesItem; (C++11新增)

  2. typedef char *pstring的前提下,const pstring cstr = 0const char *cstr = 0是不等价的
    1)const pstring cstr = 0
    const修饰pstring,但pstring本身就是指向char的指针,所以这句话定义了一个指向char的常量指针cstr
    2)const char *cstr = 0
    const修饰char,所以这句话定义了一个指向常量char的指针cstr

  3. auto(C++11新增)

  4. 在这里插入图片描述

  5. auto和const、指针、引用放一起的情况
    在这里插入图片描述

  6. decltype类型指示符(C++11)
    1)decltype(f()) sum = x; //sum的类型就是函数f()的返回值
    2)返回类型的识别:
    i.使用的表达式是变量---->返回该变量的类型,包括const和引用
    ii.使用的表达式不是变量---->返回该表达式结果的类型
    iii.变量加括号---->返回引用,注:decltype((variable))双层括号的结果将永远是引用

举例:
int i = 42, &r = i;
decltype(r)返回类型是引用,必须初始化
decltype(r + 0)返回类型是int
decltype((i))返回类型是引用,必须初始化
  1. decltype和const:
    在这里插入图片描述

  2. decltype和引用
    在这里插入图片描述

  3. 预处理器:从C语言继承而来,编译之前执行的程序,预处理变量:#include、#define、#ifdef、#ifndef、#endif

  4. 头文件保护符
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值