基本类型
算术类型
整型可以分为带符号“signed”和无符号“unsigned”。带符号可以表示正数、负数和0,无符号仅能表示大于0的值。
类型int、short、long和long long都是大夫好的,在这些前面添加unsigned就可以得到无符号类型。
类型转换
举个🌰
boll b = 42; //b为真
非布尔类型的算术值赋给布尔类型时,初始值为0则结果false,否则为1.
int i = b; //i的值为1
把布尔值赋给非布尔类型时,初始值为false结果为0,初始值为ture结果为1.
i = 3.14; i的值为3
浮点数赋值给整数类型,结果值仅保留小数点前的部分。
double pi = i; //pi的值为3.0
整数值赋给浮点类型,小数部分记为0
unsigned char c = -1; //假设char占8比特,c为255
赋给无符号类型一个超过它表示范围的值,结果是初始值对无符号类型表示数值总数取模后的余数。例如8比特大小的unsigned char表示0~255区间内的值,如果我们赋给一个区间外的值。实际结果是该值对256取模后的余数,即255.
signed char c2 = 256; //假设char占8比特,c2的值未定义
赋给带符号类型一个超过它表示范围的值,结果是未定义的。
字面值常量
以0开头的是八进制
以0x或0X开头的是十六进制
-42 这个符号不在字面值内,仅表示对这个字面值取负值。
浮点型字面值表示为一个小数或者以科学计数法表示的指数
例如 3.14 3.14159E0 0. 0e0 .001
‘a’ char型字面值
”hello world“ 字符串字面值 实际上是由常量字符构成的数组
'A’表示单独字符 "A"代表一个字符的数组
变量
int sum =0 , value ,units_sold=0 ; //sum、value和units_sold 都是int
sales_item item; //item的类型是sales_item
std::string book("0-230-24-x"); //book通过一个string字面值初始化
初始化 初始化不是赋值,把对象的当前值擦除,以一个新的值替代。
声明:使名字为程序所知,如果一个文件想使用别处定义的名字,则必须包含对那个名字的声明。变量声明规定了变量的类型和名字。
定义:负责创建于名字关联的实体,规定了变量的类型和名字,申请储存空间,为变量赋初值。
变量只能定义一次,可以多次声明。
想声明而非定义,则加关键字:extern,而且不要显示初始化变量;但如果extern语句中包含初始值,就不再是声明,而是定义了。
extern int i; //声明i而非定义i
int j; //声明并定义 j
extern double pi = 3.1415926; // 定义
作用域
(待补充)
全局作用域
(待补充)
嵌套作用域
(待补充)
复合类型
引用:为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符携程&d的行驶来定义引用类型,其中d使声明的变量名。(只是给一个已经存在的对象取了另外一个名字)。
引用的定义:举个🌰
int i =1024, i2 = 2048; //i和i都是int
int &r =i ,r2 = i2; // r是一个引用,和i绑在一起,r2是int
int i3 =1024, &ri = i3; //i3是int, ri是一个引用,和i3绑定在一起。
int &r3 = i3, &r4 = i2; //r3和r4都是引用。
int &refVal4 = 10; // 错误,引用类型初始值必须是一个对象。
double dval = 3.14;
int &refVal5 = dval; //错误,此处引用的初始值必须是int类型
指针:指向(point to)另外一种类型的复合类型; 指针实现了对其他对象的间接访问;
( 指针本身就是一个对象,允许指针赋值和拷贝,在生命周期内可以指向不同的对象; 无须在定义时赋初值;)
定义指针类型方法:将声明符写成*d的形式,其中d是变量名
举个🌰:
int *ip1, *ip2 ; // ip1和ip2都是指向int型对象的指针。
double dp, *dp2 ; //dp2是指向double型对象的指针,dp是double型对象。
//获取对象地址,取地址符 (&)
int ival = 42 ;
int *p = &ival ; //p存放变量ival的地址 or p是指向变量ival的指针
指针的类型和指针指向的对象要严格匹配
利用指针访问对象,举个🌰
//如果指针指向了一个对象,则允许使用解引用符(*),来访问对象:
int ival = 42;
int *p = &ival ; // p存放变量ival的地址
cout << *p ; // 由符号*得到指针p所指对象,输出42
空指针:不指向任何对象,在试图使用一个指针之前首先检查是否为空。
int *p1=nullptr; //等价于 int *p1 = 0;
int *p2=0 ; //直接初始化p2 为字面常量0
int *p3=NULL;// 等价于 int *p3 = 0;
赋值和指针
其他指针
void*指针:用于存放任意对象地址。举个🌰:
double obj = 3.14,*pd = &obj; // void* 可以存放任意类型对象的地址
void *pv = &obj; // obj 可以存放任意类型对象
pv = pd; // pv 可以存放任意类型指针
复合类型声明。举个🌰:
int* p1,p2; //p1是指向int的指针,p2是int
int *p1, *p2; //p1 p2都是指向int的指针
//** 是指向指针的指针
int ival = 1024 ;
int *pi = &ival ; //pi是指向一个int的数
int **ppi = &pi ; // ppi是指向一个int的指针
const限定符:与const绑定,称为对常量的引用 。举个🌰:
int i = 42 ;
const int &r1 = i ; //
const int &r2 = 42 ; //
const int &r3 = r1 * 2 ; //正确,r3是一个常量引用
int &r4 = r1 *2 ;//
(未完)
处理类型
(未完)
自定义数据结构
(未完)
(一天最多看这么多,看多了会死)