C++ 变量和基本类型(一)

来源:互联网 发布:阿里云ecs翻墙 编辑:程序博客网 时间:2024/06/06 05:35
1基本内置类型
C++ 定义了一套包括算术类型和空类型在内的基本数据类型。算术类型包括字符,整型数,布尔值和浮点数。空类型不对应任何具体地值,仅用于特殊的场合,例如函数不返回任何值时使用空类型作为返回类型。
算术类型分为两大类:整型(包括字符和布尔类型在内)和浮点型。
带符号类型和无符号类型:除去布尔类型和扩展的字符类型外,其他整型可以划分为带符号的(signed)和无符号的(unsigned)两种。类型 int, short, long 和 long long 都是带符号的。与其他整型不同,字符型被分为三种:char, signed char 和 unsigned char。类型 char 和类型 signed char 并不一样。尽管字符型有三种,但是字符的表现形式却只有两种:带符号的和无符号的。类型char 实际上会表现为上述两种形式中的一种,具体是哪种由编译器决定。
类型转换
bool b = 42; // b为真
int i = b; // i 的值为1
i = 3.14; // i 的值为3
double pi = i; // pi的值为3.0
unsigned char c = -1; // 假设 char 占8比特,c的值为255
signed char c2 = 256; // 假设 char 占8比特,c2 的值是未定义的
Note: 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总和取模后的余数。当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的。
当从无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须确保结果不能是一个负值。
默认初始化:
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量初始化为 0 。定义在函数体内部的内置类型变量将不被初始化。
2 变量:
变量声明和定义:
声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义负责创建与名字关联的实体。
extern int i; // 声明 i 而非定义 i
int j; // 声明并定义j
3 复合类型:
复合类型是指基于其他类型定义的类型。C++ 语言有几种符合类型,例如引用和指针。
引用
引用是为一个已经存在的对象所起的另外一个名字。引用必须被初始化。
int ival = 1024;
int &refVal = ival;
指针
指针指向对象,允许使用操作符*访问对象
int ival = 42;
int *p = &ival;
cout << *p; // 输出42
空指针不指向任何对象
int *p1 = nullptr; // 等价于 * p1 = 0
int *p2 = 0;
int *p3 = NULL; // 等价于 * p3 = 0
int 变量直接赋给指针是错误的,例如
int zero = 0;
p1 = zero;
应用和指针都能提供对其他对象的间接访问,然而在具体实现细节上二者有很大的不同,其中重要的一点就是引用本身并非一个对象。一旦定义了引用,就无法令其再绑定到另外的对象,之后每次使用这个引用都是访问它最初绑定的那个对象。指针和它存放的地址之间就没有这种限制了。
void* 指针
void* 是一种特殊的指针类型,可以存放任意对象的地址。
double obj = 3.14, *pd = &obj;
void *pv = &obj;
pv = pd;
利用void * 指针能做的事儿比较有限:拿它和别的指针比较、作为函数的输入或输出,或者赋给另外一个void*指针。不能直接操作void*指针所指向的对象,因为并不知道这个对象到底是什么类型。
复合类型的声明
定义多个变量
int* p1, p2; // p1 是指向int 的指针, p2 是int
指向指针的指针
int ival = 1024;
int *pi = &ival; // pi指向一个int型的数
int **ppi = &pi; // ppi指向一个int 型的指针




0 0