C++数据类型与语句
Part Ⅱ 数据类型和语句
基本数据类型
数值型和字符型数据的字节数与数据范围

注意
- char是一个字符,不支持汉字
- long,long long,long double 有多长没有明确定义,由编译器决定
- long不短于int,int不短于short
- 需要明确自己使用的编译器的基本数据类型的长度
sizeof() 运算符
用法:
- sizeof(类型)
- sizeof(变量)
返回值:数据类型或者变量的字节长度
常量与变量
常量:程序运行过程中,其值一直不变的量
整数常量
- 十进制 30
- 八进制 030(24)
- 十六进制 0x30 (48)
- 后缀 30l 30L 30ul
实数常量 - 十进制 30.5
- 指数形式 23E2 23e2
编译器根据表面形式(字面值,literal value)来判断常量类型
字符常量
使用一个字节来存储一个字符 `a`
也可以通过单引号括起来的转义字符表示该字符 '\x30 \060'
每个字符对应一个ASCII码 可以通过单引号括起来的转义符表示该字符
需要记住的字符的ASCII码值
| 字符 | ASCII码值 |
|---|---|
| 0 | 48 |
| 空格 | 32 |
| A | 65 |
| a | 97 |
| 使用wchar_t 宽字符,常量L加前缀 L‘汉’ 可以表示汉字 |
有些控制字符(回车、换行、分页、 缩进)必须要通过转义符表示

字符串常量
用""界定
对于标准C,标准类库没有string,字符串在内存中以字符数组存放,以'\0'结束
所以 "a"在内存中占两个字节 a '\0' 'a'是一个字符
cpp中的String对象,数据如何组织开发人员不知道
变量命名-标识符
标识符:给变量,数组,函数起名,通过名字访问
语法规则
- 以大小写字母,下划线,$开头
- 后续可以有大小写字母,下划线,$和数字0-9组成
- 大小写敏感
- 不能是C++关键字或操作符
可读性
- 全局变量见字知意,名字不要果断,局部变量,循环控制 i,j,k
- 命名风格统一
- 匈牙利命名法
- 驼峰命名法
基本数据类型
变量
一个数值内存空间,可以通过名字读写其中的值
在C/C++中,变量需要严格遵循定义(分配),赋值,使用,回收的次序
编译器的动作:
- 定义:类型 名字
- 根据类型,分配内存空间,将名字关联内存空间,将来可以通过名字访问该空间
- 赋值:对内存空间初始化
- 使用:获取,或者改变内存空间的数值
- 回收:需要理解变量的回收机制
变量有一定的生存周期与作用范围
变量定义--auto
auto类型的变量,编译器会自动推断类型变量
配合泛型
常变量
C++使用const 定义 常变量
常变量本质是变量,有名字的内存空间,但约束数值在程序运行生命周期不能改变
- constexpr 编译时常量 类似#define
运算表达式
运算符

- 自增自减运算符
关系表达式与真假值
C++中,字符、bool转换为整数参与算数运算
- 非零为真,0为假
- 关系表达式的结果以及布尔变量的值有两个 1为真,0为假
- 布尔变量与布尔常量都占一个字节
混合表达式
优先级
分析混合表达式,从左向右看:
- 先算优先级高的
- 优先级相同,看结合方向
- 括号、双目运算符、逗号运算符从左到右计算
- 单目运算符、三目运算符、赋值从右到左
- 小括号优先级最高,可以用小括号改变(明确)优先级
优先级:括号>单目>双目>三目>赋值>逗号
逗号运算符与逗号表达式
表达式1,表达式2,表达式3,...,表达式n
整个表达式从左向右求解,结果为最后一个表达式的值
逗号表达式 优先级最低
作用:
- 变量定义赋值 int a=3,b=4;
- 某些语法限定 for(int i=0,j=2;i<100;i++,j++)
编译优化
- 使用逻辑与或逻辑或,会产生短路,是否执行优化,可能影响运行结果
- 局部规约,非全局规约 a+b+c*d 先算a+b 再算c*d
++的进一步说明
规则1:
++a可以作为左值,a++不行1
规则2:
从左到右解析,同级从右到左计算
规则3:
后加(a++)优先级高,先加(++a)与单目加(+a)同级
混合运算
运算时,根据当前处理的运算符,决定运算数转换的类型
转换会根据原有数据生成临时数据参与运算,原有数据不变
数据类型转化(运算)可能会导致两类问题:
- 溢出
- 精度损失
类型转换
C++的类型转换语法不像Java那样严格,需要开发者自己保证转换安全
- 有符号转无符号,需要开发者保证有符号数是正数
- 无符号数转有符号数,需要开发者保证不越界
- 多字节数据类型向少字节数据类型转换,需要开发者保证不越界
- double可以自动转换出float,浮点数自动/隐式转换得到整数
- 两个不兼容的不同类型的值相加,结果自动在转化为更大的数(正数)的类型
强制类型转换
- java风格 c风格
(类型)参数名 - 类型作为函数名,()作为参数
- double(a)
- int(x+y)
- int(6)%4
- 复杂风格
static_cast <type-id>(expression)
位运算(不考)

输出输出语句
C++语句
空语句 ;
声明语句 int i=1;
表达式语句 a=3; 3+5;
流程控制语句 选择、循环、跳转
标号语句 : 配合goto,break continue
符合语句 {}
输入输出语句
C++中输入和输出通过输入输出流来实现
cin,cout是预定义的流类对象,定义位于头文件iostream中
cin
- 在缺省的情况下,cin自动跳过输入的空白符
- cin.get()读空格,cin.geiline()读一行
- 按照八进制,十六进制解释读到的数据 cin>>hex>>i
- 输入数据的格式、个数和类型与cin中所列举的变量一一对应
cout
cout可以搭配控制符,实现格式化输出
- 数据的进制、宽度、对齐方式、小数点位数
- cout<< setfill('*')
- cout << setw(3) << 4 << setiosflag(ios::left) << 12 << setw(4) <<4 << endl;
- 用*填充,字符位置宽度(每次都要设置),对齐方式(更改时设置)
- 结果**4124***
输出操作符
- cout<<12<< hex <<12 << oct << 12 << 12
- 对于浮点数,格式包括科学计数法输出,有效位数等
- cout<< setprecision(5) <<12.34567 <<\endl
ostream类也可以提供函数输出
分支循环控制流程
与java完全相同

浙公网安备 33010602011771号