• C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器
  • 注意:C++篇为本人手动将Word文档修改成Markdown格式(因为网上修改的方法都会出现较多错误),故格式可能有时会不太整齐请见谅,阅读时请务必主要内容前的编号

变量和常量

标识符规则

  1. C++标识符具体规则如下:

① 第一个字符必须是字母或下划线;

② 后跟字母、下划线、或数字;

③ 标识符对大小写敏感;

④ 不能与c++保留字(即关键字)同名;

⑤ 标识符在C++中一般是32字符(根据不同系统对标识符长度的规定不同而改变)

  1. 一个标识符的作用域是程序中的一段区域,用于确定该标识符的可见性。当标识符在一段区域中可见时,就可以在该区域内使用此标识符。作用域有五种:

① 块作用域(局部作用域)

② 文件作用域(全局作用域):在函数和类之外说明的标识符具有文件作用域,其作用域从说明点开始,在文件结束处结束。 如果标识符出现在头文件的文件作用域中,则它的作用域扩展到嵌入了这个头文件的程序文件中 ,直到该程序文件结束,例如外部静态变量,外部变量和外部静态变量合称为全局变量或全程变量

③ 函数原型作用域

④ 函数作用域

⑤ 类作用域  

(二)分隔符

  1. 空格,TAB,回车CR,换行LF,分号,括号,中括号,花括号,逗号,运算符(+,-,*,/...)都是c++语言里的分隔符(?不是分隔符)

(三)常量

  1. 常量分为六种:整型常量、实型常量、字符型常量、字符串常量、符号常量(define)、布尔常量

  2. null是java中的写法。C/C++中的空是NULL

  3. 长双精度(long double)在GCC中占12字节,在Visual C++中占8字节

  4. 符号常量不能被赋值

(四)变量

  1. 任何全局变量都只能被定义它的程序文件中的函数访问 // 错误,因为如果函数定义在全局变量之前,则不能访问全局变量

  2. 全局变量和静态变量都是会自动初始化为0,堆和栈中的局部变量不会初始化而拥有不可预测的值

  3. 全局变量可用于函数之间传递数据

  4. 进行初始化即可自动获取初值为0的变量是全局变量和用static修饰的局部变量

  5. 已经定义过的全局变量 假如用引用头文件的方式引用,假如有两个cpp以上引用这个头文件就会出现重复定义,用extern引用 只是声明,不会分配内存,不会重复定义,所以用extern

  6. extern只能用来声明已定义的外部变量,而不能用于变量的定义,只要看到extern,就可以判定这是变量声明,而不是定义变量的语句,例如对于int a而言既可以说是定义也可以说是声明

  7. 初始化变量的两种方法:

① int a = 0;// 这种写法,就是经典的C的写法,初始化a为零

② int a(0);// 这个是使用了构造函数写法的初始化,相当于定义一个int的对象,其初始化的传给构造函数的值为零

​ 8.寄存器变量

① 寄存器变量只能是局部变量或函数的形式参数(因为寄存器变量属于动态存储方式)

② 寄存器变量只能为int型或char型

③ 寄存器变量不能进行取地址操作(因为寄存器是无地址的)

④ register只是一个建议型关键字(例inline),但即便没有请求成寄存器变量依然不能对他取地址,因为他已经被声明为register了

(五)转义字符

  1. char a ='\82';把从转义符""开始后面的数字和转义符一起忽略,表示将最后一个字符’2’赋给变量a

  2. \ooo和\xhh称为通用转义字符,其中ooo表示可以用1-3位八进制数表示一个ASCLL字符,hh表示可以用1-2位十六进制数作一个ASCLL字符(注:\9错误,\0xFE错误)

(六)类型声明

  1. C++里大写TRUE和小写true区别 true是bool型的; TRUE是int(BOOL)型的(C++中无BOOL类型以及大写的TRUE)

  2. ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps385A.tmp.jpg)

  3. int和const int都是int类型

  4. float a,b=&a;//a的类型是float,b的类型是float,&a的类型是float**。 b和&a类型不同不能进行赋值操作

  5. C++声明double变量用小写的double

  6. 用到volatile关键字修饰变量的情况:(了解)

① 设备的硬件寄存器(如:状态寄存器),例对硬件寄存器进行操作

② 一个中断服务子程序中会访问到的非自动变量,例外部中断会改变变量

③ 多线程应用中被几个任务共享的变量,例外部任务会改变变量

④ java/C/C++中volatile关键字可以保证并发编程中的可见性和有序性

⑤ 一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它

⑥ 优化器在用到volatile变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份

⑦ volatile适用于多线程应用中被几个任务共享的变量

​ 7.浮点型常量的指数形式(科学记数法):以f e/E n格式组成浮点数,其中f可以是整数或小数,E/e表示以10为底的幂,n为指数且必须为整形,f和n不可或缺

  1. 对于十进制的浮点数整数和小数部分可以忽略其中之一

  2. 八进制开头一定要以数字0开头

  3. null表示没有地址;null可以赋值给引用变量,不能将null赋给基本类型变量

  4. int和char前面都可以加signed和unsigned修饰,如果指定为signed则以补码形式存放

  5. C++的自定义数据类型: 类(class),结构体(struct),枚举(enum),共用体(union),typedef

(七)数据类型关键字

  1. 类型修饰符char,int,long,int,short都可以用unsigned修饰,但float,double,bool不能

  2. 如果指定为signed(有符号),则数值以补码形式存放,如果用unsigned,则数值没有符号,全部二进制位都用来表示数据本身

  3. 有符号时,存储的最大值为215-1(32767),最小值为—32768;无符号能存储的最大值为216-1(65535),最小为0

  4. c++标准语法中是没有byte类型的,但有相似的类型char

类型转换

  1. 类型转换分两种:

① 自动类型转换(隐式)

特点: 代码不需要进行特殊处理,自动完成

规则: 数据范围从小到大

安全性:安全

② 强制类型转换:

特点:代码需要进行特殊的格式处理,不能自动完成

格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据

安全性:不安全

将一个double型数据赋给float型时,要注意数值范围不能溢出,否则出现溢出错误

1. 三种强制类型转换表达式:

① static_cast(E)

  1. 基本类型之间的转换,但不能用于基本类型指针之间的类型转换(void指针和基本类型指针之间可以

  2. 用于有继承关系的子类与父类之间的指针或引用的转换

  3. 空类型指针转换为任意基本类型的指针

② const_cast

  1. static_cast 不能将 const int* 转成 int*,const_cast 就可以,用法为 const_cast (expression)

  2. const_cast<>里边的内容必须是引用或者指针,就连把 int 转成 int 都不行

③ reinterpret_cast

  1. 用法为 reinterpret_cast (expression)

  2. type-id 必须是一个指针、引用、算术类型、函数针或者成员指针

  3. 可改变指针或引用的类型

  4. 将指针或引用转换为一个足够长度的整形

  5. 将整型转换为指针或引用类型

④ dynamic_cast

  1. 前面三种都是编译时完成的,dynamic_cast 是运行时处理的,运行时要进行类型检查

  2. 不能用于内置的基本数据类型的强制转换

  3. dynamic_cast 要求 <> 内所描述的目标类型必须为指针或引用。dynamic_cast 转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回 nullptr

  4. 在类的转换时,在类层次间进行上行转换(子类指针指向父类指针)时,dynamic_cast 和 static_cast 的效果是一样的。在进行下行转换(父类指针转化为子类指针)时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全

  5. 使用 dynamic_cast 进行转换的,基类中一定要有虚函数,否则编译不通过(类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义)

  6. 表达式dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针,如果可以,它返回一个新指针,甚至计算出为处理多继承的需要的必要的偏移量;此可以作为对象继承之间的转换

  7. 对于使用dynamic_cast进行基类和派生类之间的转换规则:向上转换一定成功,向下转换不一定成功。向下转换必须存在虚函数,不然编译错误

⑥ T(E)

⑦ (T)E

  1. E代表运算表达式,T代表一个类型表达式

  2. 上述任一种都可以按自己意愿进行所需的类型强制转换

  1. ![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps386B.tmp.jpg)//横向的箭头表示必定的转换(float型在运算时一律先转换为double型),纵向箭头表示当运算对象为不同类型时转换方向

3. C++的基本数据类型之间的转换规则:char>short>int>unsigned->long->unsigned->long->float->double->long double

  1. 整数默认为int,大了会自动扩展到long和long long。 小数默认为double,精度提高会自动扩展到long double

  2. 将一个 int,short,long型数据赋给一个char型变量,只能将其低8位原封不动的送到char型变量(发生截断);将浮点型数据赋给整型变量,舍弃其小数部分

  3. 将double型数据赋给float变量时,截取前面7位有效数字存储到float变量;将float型数据赋给double变量时,数值不变,有效数字扩展到16位

  4. int和float一定是在整型变量可输出字符的范围内才可以与字符数据互相转换

C++篇:第一章_变量和常量_知识点大全的更多相关文章

  1. 【C语言探索之旅】 第一部分第四课第一章:变量的世界之内存那档事

    内容简介 1.课程大纲 2.第一部分第四课第一章:变量的世界之内存那档事 3.第一部分第四课第二章预告:变量的世界之声明变量 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答 ...

  2. iOS开发Swift篇—(二)变量和常量

    iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...

  3. ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇

    ASP.NET自定义控件组件开发 第一章 第三篇   第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...

  4. Java语言程序设计(基础篇)第一章

    第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...

  5. 《Visual C# 从入门到精通》第一章使用变量、操作符和表达式——读书笔记

    前言: 这个笔记是我个人总结,主要是熟练自己查看<Visual C# 从入门到精通>(第8版)这本书时,懵然起总结的想法,只是总结一些知识点,在工作项目会用得上,但是对毫无C#语言基础的, ...

  6. Go语言【第三篇】:Go变量和常量

    Go语言变量 变量来源于数学,是计算机语言中能存储计算结果或能表示值抽象概念.变量可以通过变量名访问.Go语言变量名由字母.数字.下划线组成,其中首字母不能为数字,声明变量的一般形式是使用var关键字 ...

  7. 新手小白入门C语言第四章:变量与常量

    C 变量 变量其实只不过是程序可操作的存储区的名称. C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和 ...

  8. Shell第一章《变量》

    shell前言 什么是shell shell-'壳' 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称. Shell本身是 ...

  9. 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯

    1      前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...

  10. DirectX9:基础篇 第一章 初始化Direct3D

    一.简介 二.Direct3D类 1.创建D3D类 IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion); //Direct3D类的创建 IDirec ...

随机推荐

  1. 小景的Dba之路--如何导出0记录表以及数据泵的使用

    小景最近在系统压测相关的工作,其中涉及了数据备份导出的操作.今天的问题是:exp命令不会导出0记录表,那么我们探讨下如何导出0记录表以及数据泵的使用. 首先,我们先刨析一下问题现象及原因: 在 Ora ...

  2. PTA乙级1039(C++)散列表解法

    题目 1039 到底买不买  小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖. 于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如 ...

  3. Python:基础&爬虫

    Python:基础&爬虫 Python爬虫学习(网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另 ...

  4. P2951 [USACO09OPEN] Hide and Seek S 题解

    Problem 题目概述 给你一个无向图,边权都为 \(1\) ,求:离 \(1\) 号点最远的点的编号.最远的距离.有几个点是离 \(1\) 号点最远的. 思路 直接用:优先队列 \(BFS\),先 ...

  5. 使用django 定时任务 (Django + celery + beat )

    安装 django + celery + results https://www.cnblogs.com/lanheader/p/13615772.html 安装 django-celery-beat ...

  6. DX后台截图C++实现代码

    DX后台截图C++实现代码 文章仅发布于https://www.cnblogs.com/Icys/p/DXGI.html和知乎上. 传统的GDI API (BitBlt)虽然可以完美的完成后台截图的任 ...

  7. ASM字节码操作类库(打开java语言世界通往字节码世界的大门)

    前言:授人以鱼不如授人以渔,应用asm的文章有很多,简单demo的也很多,那么ASM都具备哪些能力呢?如何去学习编写ASM代码呢?什么样的情景需要用到ASM呢?让我们带着这些问题阅读这篇文章吧. 这里 ...

  8. 宏(define)与常量(const)

    既然选择了远方,便只顾风雨兼程. 宏(define) 一. 宏的理解   宏是一种批量处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则 ...

  9. JavaWeb项目练习(学生选课管理系统)三【登录功能】

    需求: 首页为用户登录页面,管理员,教师,学生三种角色用户登录后,进入相应的功能页. 在index.jsp文件里跳转到login.jsp页面,为了更好地书写 <%@ page contentTy ...

  10. serdes 复制时钟

    serdes复制时钟一般指的是,将rx lane的CDR 恢复时钟发送给TX/PLL, 这样rx和tx的时钟频偏就一致,在远端环回时经常用到.RX,TX时钟同频后环回数据就可以畅通发出去,否则RX/T ...