Java程序员的C++回归路 (2)

确定内存地址的数据需要数据类型和读取内存地址的二进制数据,不同的数据类型决定了占用多少比特以及如何解析这些内存数据。

上述的int、long、long long类型都是有符号数,对应的无符号数前面加上unsigned。

数据类型的后缀中是U时,字面量是unsigned类型,类型可以使unsigned int,unsigned long或unsigned long long 类型;

如果后缀是L,字面量类型时long;

如果后缀是LL,字面量类型时long long 或者unsigned long long

如果后缀是UL或ULL,字面量类型时unsigned long或unsigned long long

前缀类型表:

Meaning Prefix Type
u   Unicode 16 character   Char16_t  
U   Unicode 32 character   char32_t  
L   wide character   wchar_t  
u8   utf-8   char  
初始化和定义

C++提供了多种初始化的方式:


int unit = 0;
int unit = {0};
int unit{0};//列表初始化
int unit(0);

编译器不允许使用列表初始化时类型信息丢失:


long double ld = 3.1415926 Declaration & Definition

声明:声明一个名称让程序知道

定义:定义除了声明名称和类型,同时申请内存和提供默认值

为了得到一个变量的声明而不是定义,我们使用extern关键字,而且不显示的初始化变量。

extern int i;  // 声明变量
int j;  // 定义变量

一个变量可以被声明多次,但是只能被定义一次。

作用域

全局作用域:定义在函数体之外的变量

块作用域:{}内的作用域

复合类型

C++中有多种复合类型,这里记录指针和引用。

引用为对象起了另外一个名字,通过&d来定义引用类型,其中d是变量名


int a = 1;
int &d = a; // 声明引用,d是a的另外一个名字
int &d2; // 报错,引用必须初始化

引用非对象,相反的,它是为对象取了一个别名

为引用赋值,实际是赋值给引用的对象;获取引用的值,获取的是对象的值;将引用的值作为初始值,实际上是将引用对象的值作为初始值。

因为引用本身不是对象,所以不能定义引用的引用。

无法将引用绑定到另外一个对象,因此引用必须初始化。

可以给引用赋值(等于给别名赋值),如下代码所示:

int i = 0;
int &ri = i;
ri = 10;  // legal,这里等于是给i进行赋值

指针

指针时一个指向其他类型的复合类型,值是指向对象的地址。

指针本身是一个对象。

指针值

指针的值可以指向一个对象

可以指向刚刚读取完的对象的值(类似于Iterator执行的对象)

可以是个空指针,即没有绑定任务对象

invalid指针,除了上述三种指针的值都是不合法的。

指针的指针

可以使用**p获取指针的指针所在对象的值。

void*

void*是一个特别的指针类型,可以保存任意对象的地址

在理解类似于 *&p这种类型的时候,将修饰符从右往左读去理解。

const修饰符

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzpps.html