1.内置类型包括算数类型和空类型(void,适用于没有任何返回值的函数或者其他的特殊场合)。算数类型包括整形(字符和布尔型)和浮点型。
2.除了布尔型和扩展的字符型之外。,其余的整形都可以通过在前面添加unsigned来变成无符号类型(带符号的类型可以表示负数,0,和整数。无符号类型只可以表示大于等于0的数)
3.字符型被分为三种(char,signed char和unsigned char)。但是字符型只有带符号和无符号的。
char可以表现为上诉其中一种,具体的由编辑器决定。
4.关于选择类型:
(1)当明知是不可负时,选择无符号
(2)超出int用long long
(3)算数表达式中不要用char和bool。(因为char有符号无符号不确定)。(只有在存放字符和布尔型的时候用他们)
(4)执行浮点型的时候用double。
5.单引号里面的是字符,双引号括起来的就是字符串。字符串实际上就是字符构成的数组。编译器在每个字符串的末尾添加一个‘\0’。因此字符串的字面值长度应该比它的内容多1.
6.数据类型决定着变量所占内存的大小和布局方式,该空间能存储值的范围。以及变量能参与的运算。对于C++来说。“变量”和“对象”和可以互换使用。
7.关于变量
(1)string是一种表示可变字符序列的数据类型。如果没有初始化,那么生成一个空串。
(2)初始化的表示方法:
int a=0;
int a={0};
int a{0};
int a(0);都行
花括号(列表初始化)是C++11的新标准。当用于内置类型的初始化的时候,如果我们使用列表初始化存在丢失信息的分险,那么将会报错。例如:
double ld=3.1415926;
int a{ld};错误,因为转换未执行
int a(ld);正确。
(3)如果内置类型没有初始化。那么要是定义在函数体外,那么默认值为0。如果定义在函数体内,那么不将被初始化。一个未被初始化的内置类型变量的值是未定义的,所以对此进行拷贝以及利用其它方式对此进行访问是错误的。
(4)变量的声明和定义
声明使得名字为程序所知,一个文件如果想用到别处定义的名字就必须包含对那个名字的声明。而定义则是创建与名字关联的实体。
声明而非定义:extern int i;(不要初始化)
声明并定义:int i;
一个变量只可以定义一次,但可以被声明多次。
8.引用
引用只是给已经存在的对象起一个别名(所以引用必须初始化为已经存在的对象)
int a=3;
int &b=a;(b指向a,是a的另一个名字)对b进行的所有操作都是在与之绑定的对象(a)上进行的。
给b赋值,其实是给a赋值,把b赋给别的对象,其实是把a赋给别的对象。
因为引用本身不是一个对象,所以不可以定义引用的引用。
9.指针
(1)指针与引用的不同。
指针本身是一个对象,所以可以对指针进行赋值和拷贝,而且在指针的生命周期里可以先后指向几个不同的对象。
指针在定义的时候无需一定要赋初值。(和其他内置类型一样,在块作用域内定义的指针如果没有初始化,也将拥有一个不确定的值)。
因为引用不是具体的对象,所以不可以定义指向引用的指针。
(2)&和*
当&和*出现在声明语句中(左侧)代表是引用和指针类型。
用于表达式中(右侧)&代表的是取地址符;*代表的是解引用符(也就是的到指针所指的变量)
int *p=&a;
int &r=*p;
的意思是给(*p)也就是变量a起了个新名字叫r。
(3)定义空指针
int * p=nullptr;(C++11)
int *p=0;
int *p=NULL(需要加上#include cstdlib头文件)
(4)void *指针
void *指针可以指向任何类型的值,但是不同的是我们对于其指向的对象类型并不了解,所以不能直接操作void *指针所指的对象。以void *视角来看内存空间也就仅仅是内存空间,没办法访问内存空间里的对象。
(5)指向指针的指针
int a=10;
int *p=&a;
int **q=&p;
//输出a的值有以下三种方法:
cout<<a;
cout<<*p;
cout<<**q;(其中*q代表的是变量p,**q代表变量a)
(6)指向指针的引用(因为指针是具体的对象,所以可以对指针进项引用)
int i=42;
int *p;
int *&r=p; //给指针变量p起了个别名为r;所以现在r既是指针p;对r操作就是对p操作
r=&i; //因为现在r就是指针了,所以r指向i,就是p指向i;
*r=10; //i=10
分析r到底是什么类型。可以从右到左来阅读。离变量最近的符号对变量有最直接的影响(&r),所以r是一个引用。声明符的其余部分用以确定r引用的类型是什么?*表明r引用的是一个指针。所以r引用的是一个int型指针。
10、const(const对象必须初始化)
(1)const int bufSize=512;
定义变量bufSize成为一个常量。任何给bufSize赋值以及试图改变bufSize变量大小的操作都是不允许的。
(2)默认的const对象只有在本文件中才有效。要是想使在多个文件之间共享const对象,必须添加entern关键词。例如:extern const int bufSize;
(3)初始化与const
如果利用一个对象去初始化另外一个对象,则他们是不是const都无关紧要
int i=42;
const int ci=i; //用一个非const变量去初始化const变量
int j=ci; //const变量去初始化const变量