我的C++学习日记——变量和基本类型(一)

来源:互联网 发布:迪杰斯特拉算法视频 编辑:程序博客网 时间:2024/05/22 07:53

一、C++定义了一系列的内置基本类型,包括算数类型(arithmetic type)和void类型,其中算数类型有字符,整形,浮点和布尔型。

1、布尔型:只有两种取值,true和false;

2、字符型:C++定义了多种字符类型

(1)char是基本的字符型,一个char要保证在机器中放置和字符相关的数值,即比如ASCII值。所以char通常和一个机器字节一样大。

(2)剩下的wchar_t、char16_t、char32_t用来扩展字符放置。wchar_t保证能够存放任何最大的机器扩展字符,char16_t和char32_t用来存放统一码。

3、整形有short、int、long int、long long,其中long long是C++11新标准中加入的。他们的最小空间分别是short 2字节,int 2字节,long int 4 字节,long long 8字节。并且他们的关系是:int 至少和short 一样长,long 至少和int 一样长,long long 至少和long 一样长。

4、浮点有float(4字节)、double(8字节)、long double(12或16字节),float一般能够保留7为有效数字,double一般能保留16位有效数字。


关于signed和unsigned:

(1)各种类型除bool之外,其余默认都为signed类型,如果要定义unsigned类型就在类型前加unsigned,只有unsigned默认为unsigned int 。

(2)C++明确说明应该把数值范围均分用来表示正数和负数。比如signed char 无符号是为0-255,有符号时是-128-127。


类型使用的说明:

(1)在明确知道数值不为负的情况下使用unsigned类型,书上这么说,但是我觉得在使用unsigned如果和signed类型计算时会把signed转换为unsigned,容易出错,而默认类型是signed的,这样虽然得到了更大的存储范围,但是程序和能比较容易出问题。

(2)整形一般用int表示,因为short太短了,而long在大多数实现中和int相同,因此用int比较好,在数值很大的时候用long long。

(3)浮点型一般用double,因为float精度太小,long double用的比较少。


关于类型转换:

(1)把浮点型赋值给整形时,会丢失小数点后面的值,

int a=3.14  //a=3

也有可能整数部分太大而整形无法存储。

(2)把整形赋值给浮点时,会把整形转换为浮点。

double b=5  //b=5.0
(3)当把一个超出范围的值赋给一个unsigned类型时,保存的值是目标类型能存储的最大值除以该值的余数。比如把-1给unsigned char,得到255。

(4)当把一个超出范围的值赋给一个signed类型时,结果是未定义的。

(5)当一个unsigned值和一个signed值一个进行运算时,会把signed值转换为unsigned。


二、变量

关于变量的初始化:

C++11中变量的初始化有4种方式:

//a=1int a=1;int b(1);int c={1};int d{1};

前两种方式和后两种方式最大的区别是用{}来初始化会更加的安全,用{}初始化是是不允许数值丢失的,即不能
int a{3.14}

而前两种则可以通过。


三、复合变量

复合变量是依据其他变量定义的,这里说明引用和指针。

1、引用:

引用可以理解为被引用变量的另一个名字,可以用它来间接操作被引用变量:

int a=1;int &b=a;  //b为a的一个引用

则b是对a的一个引用,操作b即是操作a。

需要注意的:

(1)引用必须与被引用的变量是相同类型。

(2)引用必须在定义时初始化,一经初始化无法改变。

2、指针:

指针也是一种可以间接操作其他变量的类型:

int a=1;int *p=&a;//p为指向a的一个指针,&意为取地址
这样可以通过*p来对a进行a能够进行个任何操作。


指针和引用的区别:

(1)指针是一个变量而引用不是,指针有自己的内存空间,空间内是目标变量的地址值,而引用没有。

(2)指针不用在定义是初始化,并且可以改变指向的对象。


指针操作:

(1)空指针:

int *p1=0;int *p2=nullptr;int *p3=NULL;

其中nullptr是C++11中新定义的。

(2)指针的比较,两个指向同意地址或者都为0的指针在比较时为相同,否则不同。

(3)空指针,可以把任何类型的指针赋给空指针,但是不能进行操作,

int a=1;int *p=&a;void *pv=p;

因为指针的类型决定了指针从起始内存位置向后控制的内存数量,并且也决定了内存中的内容可以进行的运算和操作,空指针无法提供这一信息,因此不能进行操作。空指针通常用来操作内存而不是内存中的值。

(4)对指针的引用:

int a=1;int *p=&a;int *&r=p;
对于r的数据类型可以这样确定,从右向左看,首先是&,说明它是一个引用,其次是*,说明引用的是一个指针。


今天就到这里,明天继续学习。