C++篇:第一章_变量和常量_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器
注意:C++篇为本人手动将Word文档修改成Markdown格式(因为网上修改的方法都会出现较多错误),故格式可能有时会不太整齐请见谅,阅读时请务必主要内容前的编号
变量和常量
(一)标识符规则
- C++标识符具体规则如下:
① 第一个字符必须是字母或下划线;
② 后跟字母、下划线、或数字;
③ 标识符对大小写敏感;
④ 不能与c++保留字(即关键字)同名;
⑤ 标识符在C++中一般是32字符(根据不同系统对标识符长度的规定不同而改变)
- 一个标识符的作用域是程序中的一段区域,用于确定该标识符的可见性。当标识符在一段区域中可见时,就可以在该区域内使用此标识符。作用域有五种:
① 块作用域(局部作用域)
② 文件作用域(全局作用域):在函数和类之外说明的标识符具有文件作用域,其作用域从说明点开始,在文件结束处结束。 如果标识符出现在头文件的文件作用域中,则它的作用域扩展到嵌入了这个头文件的程序文件中 ,直到该程序文件结束,例如外部静态变量,外部变量和外部静态变量合称为全局变量或全程变量
③ 函数原型作用域
④ 函数作用域
⑤ 类作用域
(二)分隔符
- 空格,TAB,回车CR,换行LF,分号,括号,中括号,花括号,逗号,运算符(+,-,*,/...)都是c++语言里的分隔符(?不是分隔符)
(三)常量
常量分为六种:整型常量、实型常量、字符型常量、字符串常量、符号常量(define)、布尔常量
null是java中的写法。C/C++中的空是NULL
长双精度(long double)在GCC中占12字节,在Visual C++中占8字节
符号常量不能被赋值
(四)变量
任何全局变量都只能被定义它的程序文件中的函数访问 // 错误,因为如果函数定义在全局变量之前,则不能访问全局变量
全局变量和静态变量都是会自动初始化为0,堆和栈中的局部变量不会初始化而拥有不可预测的值
全局变量可用于函数之间传递数据
进行初始化即可自动获取初值为0的变量是全局变量和用static修饰的局部变量
已经定义过的全局变量 假如用引用头文件的方式引用,假如有两个cpp以上引用这个头文件就会出现重复定义,用extern引用 只是声明,不会分配内存,不会重复定义,所以用extern
extern只能用来声明已定义的外部变量,而不能用于变量的定义,只要看到extern,就可以判定这是变量声明,而不是定义变量的语句,例如对于int a而言既可以说是定义也可以说是声明
初始化变量的两种方法:
① int a = 0;// 这种写法,就是经典的C的写法,初始化a为零
② int a(0);// 这个是使用了构造函数写法的初始化,相当于定义一个int的对象,其初始化的传给构造函数的值为零
8.寄存器变量
① 寄存器变量只能是局部变量或函数的形式参数(因为寄存器变量属于动态存储方式)
② 寄存器变量只能为int型或char型
③ 寄存器变量不能进行取地址操作(因为寄存器是无地址的)
④ register只是一个建议型关键字(例inline),但即便没有请求成寄存器变量依然不能对他取地址,因为他已经被声明为register了
(五)转义字符
char a ='\82';把从转义符""开始后面的数字和转义符一起忽略,表示将最后一个字符’2’赋给变量a
\ooo和\xhh称为通用转义字符,其中ooo表示可以用1-3位八进制数表示一个ASCLL字符,hh表示可以用1-2位十六进制数作一个ASCLL字符(注:\9错误,\0xFE错误)
(六)类型声明
C++里大写TRUE和小写true区别 true是bool型的; TRUE是int(BOOL)型的(C++中无BOOL类型以及大写的TRUE)

int和const int都是int类型
float a,b=&a;//a的类型是float,b的类型是float,&a的类型是float**。 b和&a类型不同不能进行赋值操作
C++声明double变量用小写的double
用到volatile关键字修饰变量的情况:(了解)
① 设备的硬件寄存器(如:状态寄存器),例对硬件寄存器进行操作
② 一个中断服务子程序中会访问到的非自动变量,例外部中断会改变变量
③ 多线程应用中被几个任务共享的变量,例外部任务会改变变量
④ java/C/C++中volatile关键字可以保证并发编程中的可见性和有序性
⑤ 一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它
⑥ 优化器在用到volatile变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份
⑦ volatile适用于多线程应用中被几个任务共享的变量
7.浮点型常量的指数形式(科学记数法):以f e/E n格式组成浮点数,其中f可以是整数或小数,E/e表示以10为底的幂,n为指数且必须为整形,f和n不可或缺
对于十进制的浮点数整数和小数部分可以忽略其中之一
八进制开头一定要以数字0开头
null表示没有地址;null可以赋值给引用变量,不能将null赋给基本类型变量
int和char前面都可以加signed和unsigned修饰,如果指定为signed则以补码形式存放
C++的自定义数据类型: 类(class),结构体(struct),枚举(enum),共用体(union),typedef
(七)数据类型关键字
类型修饰符char,int,long,int,short都可以用unsigned修饰,但float,double,bool不能
如果指定为signed(有符号),则数值以补码形式存放,如果用unsigned,则数值没有符号,全部二进制位都用来表示数据本身
有符号时,存储的最大值为215-1(32767),最小值为—32768;无符号能存储的最大值为216-1(65535),最小为0
c++标准语法中是没有byte类型的,但有相似的类型char
(八)类型转换
- 类型转换分两种:
① 自动类型转换(隐式)
特点: 代码不需要进行特殊处理,自动完成
规则: 数据范围从小到大
安全性:安全
② 强制类型转换:
特点:代码需要进行特殊的格式处理,不能自动完成
格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
安全性:不安全
将一个double型数据赋给float型时,要注意数值范围不能溢出,否则出现溢出错误
1. 三种强制类型转换表达式:
① static_cast(E)
基本类型之间的转换,但不能用于基本类型指针之间的类型转换(void指针和基本类型指针之间可以
用于有继承关系的子类与父类之间的指针或引用的转换
空类型指针转换为任意基本类型的指针
② const_cast
static_cast 不能将 const int* 转成 int*,const_cast 就可以,用法为 const_cast (expression)
const_cast<>里边的内容必须是引用或者指针,就连把 int 转成 int 都不行
③ reinterpret_cast
用法为 reinterpret_cast (expression)
type-id 必须是一个指针、引用、算术类型、函数针或者成员指针
可改变指针或引用的类型
将指针或引用转换为一个足够长度的整形
将整型转换为指针或引用类型
④ dynamic_cast
前面三种都是编译时完成的,dynamic_cast 是运行时处理的,运行时要进行类型检查
不能用于内置的基本数据类型的强制转换
dynamic_cast 要求 <> 内所描述的目标类型必须为指针或引用。dynamic_cast 转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回 nullptr
在类的转换时,在类层次间进行上行转换(子类指针指向父类指针)时,dynamic_cast 和 static_cast 的效果是一样的。在进行下行转换(父类指针转化为子类指针)时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全
使用 dynamic_cast 进行转换的,基类中一定要有虚函数,否则编译不通过(类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义)
表达式dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针,如果可以,它返回一个新指针,甚至计算出为处理多继承的需要的必要的偏移量;此可以作为对象继承之间的转换
对于使用dynamic_cast进行基类和派生类之间的转换规则:向上转换一定成功,向下转换不一定成功。向下转换必须存在虚函数,不然编译错误
⑥ T(E)
⑦ (T)E
E代表运算表达式,T代表一个类型表达式
上述任一种都可以按自己意愿进行所需的类型强制转换
- //横向的箭头表示必定的转换(float型在运算时一律先转换为double型),纵向箭头表示当运算对象为不同类型时转换方向
3. C++的基本数据类型之间的转换规则:char>short>int>unsigned->long->unsigned->long->float->double->long double
整数默认为int,大了会自动扩展到long和long long。 小数默认为double,精度提高会自动扩展到long double
将一个 int,short,long型数据赋给一个char型变量,只能将其低8位原封不动的送到char型变量(发生截断);将浮点型数据赋给整型变量,舍弃其小数部分
将double型数据赋给float变量时,截取前面7位有效数字存储到float变量;将float型数据赋给double变量时,数值不变,有效数字扩展到16位
int和float一定是在整型变量可输出字符的范围内才可以与字符数据互相转换
C++篇:第一章_变量和常量_知识点大全的更多相关文章
- 【C语言探索之旅】 第一部分第四课第一章:变量的世界之内存那档事
内容简介 1.课程大纲 2.第一部分第四课第一章:变量的世界之内存那档事 3.第一部分第四课第二章预告:变量的世界之声明变量 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答 ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...
- Java语言程序设计(基础篇)第一章
第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...
- 《Visual C# 从入门到精通》第一章使用变量、操作符和表达式——读书笔记
前言: 这个笔记是我个人总结,主要是熟练自己查看<Visual C# 从入门到精通>(第8版)这本书时,懵然起总结的想法,只是总结一些知识点,在工作项目会用得上,但是对毫无C#语言基础的, ...
- Go语言【第三篇】:Go变量和常量
Go语言变量 变量来源于数学,是计算机语言中能存储计算结果或能表示值抽象概念.变量可以通过变量名访问.Go语言变量名由字母.数字.下划线组成,其中首字母不能为数字,声明变量的一般形式是使用var关键字 ...
- 新手小白入门C语言第四章:变量与常量
C 变量 变量其实只不过是程序可操作的存储区的名称. C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和 ...
- Shell第一章《变量》
shell前言 什么是shell shell-'壳' 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称. Shell本身是 ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
- DirectX9:基础篇 第一章 初始化Direct3D
一.简介 二.Direct3D类 1.创建D3D类 IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion); //Direct3D类的创建 IDirec ...
随机推荐
- C++在HotSpot VM中一种巧妙的内存管理方式
在HotSpot VM中定义了一个Relocation类及相关的子类,可以通过这些类操作不同的重定位数据,如在CodeCache中读写这些数据.这些类需要的内存很小,但是不同的类需要的内存大小又不一样 ...
- nvm的安装及使用(入门级)
1 从官网下载压缩包到本地 下载地址: https://github.com/coreybutler/nvm-windows/releases 2 配置 2.1 settings.txt配置 (1)下 ...
- 基于落点打分的井字棋智能下棋算法(C语言实现)
本文设计了一种基于落地打分的井字棋下棋算法,能够实现电脑不败,所以如果玩家会玩的话,一般是平局. 算法核心 电脑根据对落子位置的打分,选择分数最高的位置,若不同落点分数相同则随机选择位置(随机选择就不 ...
- Linux账号密码安全运维
前言 随着云计算厂商的兴起,云资源如ECS不再只有企业或者公司才会使用,普通人也可以自己买一台ECS来搭建自己的应用或者网站.虽然云计算厂商帮我们做了很多安全相关的工作,但并不代表我们的机器资源就绝对 ...
- Unity 在Preferences或Project Setting窗口创建自定义配置
官方文档链接 https://docs.unity3d.com/2020.3/Documentation/ScriptReference/SettingsProvider.html 一直不习惯使用Un ...
- Thread类 常用方法
3.6 start 与 run 调用 run public static void main(String[] args) { Thread t1 = new Thread("t1" ...
- Azure Data Factory(十)Data Flow 组件详解
一,引言 随着大数据技术的不断发展,数据处理和分析变得越来越重要.为了满足企业对数据处理的需求,微软推出了 Azure Data Factory (ADF),它是一个云端的数据集成服务,用于创建.安排 ...
- DDD技术方案落地实践
1. 引言 从接触领域驱动设计的初学阶段,到实现一个旧系统改造到DDD模型,再到按DDD规范落地的3个的项目.对于领域驱动模型设计研发,从开始的各种疑惑到吸收各种先进的理念,目前在技术实施这一块已经基 ...
- JPA中@ElementCollection使用
转载请注明出处: 在JPA中,@ElementCollection注解主要用于映射集合属性,例如List.Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射.这个注解可以 ...
- Chinese Bank Card and Credit Card ID
Regular match expression: [^0-9]((3|4|5|6|9)\d{15,18})[^0-9] Rule characteristics: first number:3 or ...