1. C++是一种静态类型语言(运行前指定每个数据的类型),也是一种强类型语言(对数据的操作进行严格的类型检查)。
2. bool类型数据在算术运算时true对应1,false对应0。
3. typedef给已有类型取别名
typedef <已有类型> <别名>;
4. 常量包括两种:字面常量和符号常量。
字面常量:直接写出来的
符号常量:又称命名常量,指有名字的常量,如 const double PI=3.1415; #define PI 3.1415
5. 符号常量的作用
1)增加程序易读性
2)提高程序对常量使用的一致性
3)增强了程序的易维护性
6. 定义 对比 声明
变量定义要给变量分配内存空间,而声明没有;定义可以初始化,声明不能。
声明: extern <类型名> <变量名>;
头文件中使用extern语句对一个文件中的全局函数进行声明;
函数使用一个全局变量但是还未见到其定义时使用extern语句对其进行声明。
7. 逻辑与 && 和逻辑或 || 是短路求值(快速死亡法则):当运算结果已经确定时,后面的表达式就不会再执行。
#include<iostream>
using namespace std;
int main(){
int a=2,b=3,c=4,d=5;
int m=2,n=2;
(m=a<b) || (n=c>d);
cout<<"m="<<m<<"n="<<n<<endl;
return 0;
结果是m=1,n=2;
因为a<b 是成立的所以m=1,为真。
而“||”运算符表示“或”,有一个为真则全部为真;前半部分判断出来是真的,后半部分就不再进行运算了。
同理对于“&&”运算符,前一项为假则整个表达式为假,我们利用这个性质可以进行递归运算或者达到整洁代码的目的
8. 类型转换
隐式类型转换 -> 显示类型转换
int i=-10; unsigned int j=1; i < j 的值是false,而不是true
第1部分. 隐式类型转换
又称为“标准转换”,包括以下几种情况:
1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。
int ival = 3;
double dval = 3.14159;
ival + dval;//ival被提升为double类型
2)一种类型表达式赋值给另一种类型的对象:目标类型是被赋值对象的类型
int *pi = 0; // 0被转化为int *类型
ival = dval; // double->int
例外:void指针赋值给其他指定类型指针时,不存在标准转换,编译出错
3)将一个表达式作为实参传递给函数调用,此时形参和实参类型不一致:目标转换类型为形参的类型
extern double sqrt(double);
cout << "The square root of 2 is " << sqrt(2) << endl;
//2被提升为double类型:2.0
//double为形参(形式参数)
//2是实参(实际参数)
//举例:
比如你定义一个函数void add(int a, int b),这里的a和b就是形参。
当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。
4)从一个函数返回一个表达式,表达式类型与返回类型不一致:目标转换类型为函数的返回类型
double difference(int ival1, int ival2)
{
return ival1 - ival2;
//返回值被提升为double类型
第2部分. 显式类型转换
被称为“强制类型转换”(cast)
C 风格: (type-id)
C++风格: static_cast、dynamic_cast、reinterpret_cast、和const_cast..
9. 操作符的优先级
*p++和(*p)++的区别:
*p++等价于*p,然后p++
(*p)++等价于(*p),然后对*p的值进行++
1)按单目、双目、三目、赋值依次降低
2)按算术、移位、关系、逻辑位、逻辑依次降低
单目运算符:
是指运算所需变量为一个的运算符,又叫一元运算符
逻辑非运算符【!】、
按位取反运算符【~】、
自增自减运算符【++, –】、
负号运算符【-】、
类型转换运算符【(类型)】、
指针运算符和取地址运算符【*和&】、
长度运算符【sizeof】
双目运算符:
双目运算符就是对两个变量进行操作
初等运算符下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】
算术运算符
乘法运算符【*】、除法运算符【/】、取余运算符【%】 、加法运算符【+】、减法运算符【-】位运算符
按位与运算符【&】、按位异或运算符【^】 、按位或运算符【|】、左移动运算符【<<】、右移动运算符【>>】
关系运算符
等于运算符【==】、不等于运算符【!=】 、关系运算符【< > <= >= 】
逻辑运算符
逻辑与运算符【&&】 、逻辑或运算符【||】、逻辑非运算符【!】
赋值运算符
赋值运算符【= += -= *= /= %= > >= < <= &= |= ^= 】
逗号运算符
逗号运算符【,】
三目运算符:
对三个变量进行操作;
三目运算符对三个变量进行操作,指的是计算机c语言的重要组成部分。条件运算符是唯一有3个操作数的运算符,所以有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。
对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。[1]
<表达式1> ? <表达式2> : <表达式3>; “?”运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。
可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为是不是条件成立,条件成立为结果1否则为结果2。
注意:在C语言中,结果1 和 结果2的类型必须一致。
int a = 1, b = 2, z, c = 3;
z = a > b ? a : (b > c ? b : c);
cout << "z:" << z << endl;
这样输出的结果是:z:3
???????????????????????????????????????????????????????????????
10. 表达式中操作数的类型转换
逐个操作符进行类型转换
如: short int a; int b; double c;
a*b/c; 先a > int, 然后(a*b) > double
11. 敲重点:
计算过程中要注意数据的底层表示(是否溢出等)、表达式的副作用(短路求值等)。
————————————————