第二章 变量与基本类型知识点梳理

第二章 变量与类型知识点梳理

1.1 基本内置类型
1、类型:对象的类型定义了对象能包含的数据和能参与的运算
C++有两种基本数据类型:算法类型和空类型(void)。
算法类型包括两种类型:整型和浮点型
空类型:空类型不对应任何值,仅用于一些特殊场合。如当函数不需要返回值时,空类型可以作为函数的返回类型。
整型分为:布尔类型(bool)、字符型和其他整型
浮点型分为:单精度(flaot)、双精度(double)、可扩展精度;通常,float以一个字(32比特)来表示,double以2个字(64比特)来表示
布尔类型:取值有真或假两种状态。
字符型分为:字符(char)型和字符串型,扩展字符型。
其他整型:int、short、long、longlong类型。C++语言规定一个int至少跟一个short一样大,一个long至少跟一个int一样大,一个longlong至少跟一个long一样大。
带符号类型和无符号类型:除了布尔类型和扩展的字符型外,其他整型都可划分成带符号类型和无符号类型。类型int,short,long,longlong都是带符号类型,在前面加上unsigned就可以变成无符号类型。类型unsigned int 可以缩写成unsigned。
与其他整型不同,基本字符型(char)可分成三种:char,signed char,unsigned char。但实际上只有两种,带符号和无符号的,char会表现上述两种的其中一种。
当给无符号类型赋值时,若超出了它的表示范围,结果是初始值对无符号类型 总数取模的余数;当给带符号类型赋值时,若超出了它的表示范围,那么它是未定义的。

类型转换:当我们使用一种类型定义了对象,而对象在参与运算时应该使用的是另一种类型,那么系统会自动转换成优先级最高的类型。
2、字面值常量:从字面上就能看出的它的值。每个字面值都对应一种数据类型。
整型字面值的具体数据类型由它的值和符号决定,十进制字面值是带符号数,但严格来讲十进制字面值不会是负数,如-42的符号是不存储在十进制字面值,符号的作用只是对字面值取负;八进制和十六进制是未定符号的类型。
浮点型字面值表现为一个小数或以科学计数法表示的指数

3、转义序列:有两类字符程序员不能直接使用,一是不可打印字符,而是在C++含有特殊含义的字符(如单引号,双引号,问号等),这时要用到转义序列。转移序列均一反斜线开始。
常用的转移序列:换行符 \n;纵向制表符 \t,空几个格; 单引号 '; 双引号 " 。
可以通过添加前缀或后缀来指定或改变字面值的类型

1.2 变量
1、变量/对象的定义:具有某种数据类型的储存空间。基本形式:类型说明符+一个或多个变量名组成的列表。
string表示为一种可变长字符序列的数据类型。
2、初始值和赋值,初始值是创建变量时赋予的值,赋值是擦除变量的当前值,赋予变量另一个新的值。C++定义几种初始化的方式:
①int current=0;
②int current={0};
③int current{0};
④int current(0);
3、默认初始化
当变量在函数体外定义没有指定初值时,系统默认变量为0;
当变量在函数体内定义没有制定初值时,变量默认是未定义的。
4、变量的定义和声明的关系
变量的定义:创建一个具有某种数据类型的存储空间,并赋予初值。
声明的定义:规定了变量和数据类型,但没有给变量赋初值,通常在变量名前添加extern关键字。声明是为了让程序知道。
变量只能定义一次,而能够声明多次。
5、标识符:各种变量名,类名,函数名;由字母、下划线、数字来组成。只能由字母或下划线来开头,对大小字母敏感。
注意不能连续出现两个下划线,或下划线紧接大写字母开头,此外,定义在函数体外的标识符不能以下划线开头。
6、作用域:同一个变量在不同的作用域有不同的实体。
全局作用域:在任何函数体外定义的名字具有全局作用域,在整个程序范围内都可以使用。
块作用域;在某个函数体内定义的名字,只在这个函数内起作用。

1.3 复合类型
1、复合类型:基于其他类型定义的类型。C++有几种复合类型,其中有引用和指针。
2、一条简单的声明语句包括基本数据类型和紧随其后一组声明符列表组成。声明符有时候就只有变量名组成,有时候由修饰符和变量名组成。类型修饰符如&、星号只是声明符的一部分,引用的修饰符是&。指针的修饰符是*。
1.3.1、引用
1、引用:是给对象起别名,引用类型引用其他类型,实现了对其他对象的间接访问。声明符的形式是&d,d是变量名。int&是引用类型。
2、引用只能绑定一个对象。
3、因为引用本身不是一个对象,所以在定义引用时,并没有把初值赋给引用,而是将引用和它的初始值对象绑定在一起;对引用的所有操作,都是对它的初始值对象进行操作。
4、因为引用不是一个对象,所以引用的引用是错误的。如:int &(&a)=b;引用不可以被直接引用,比如上面这种;但是引用可以被间接引用,如:int a=10; int &b=a; int &c=b;
5、引用的类型要和与它绑定的对象类型匹配。
1.3.2、指针:
1、指针:是指向另外一种类型的复合类型,也能够间接访问其他对象。指针类型是int*,声明符的形式是*p;与引用的不同点:一、指针本身是一个对象,允许对指针拷贝和赋值,而且能在它的作用期间内可以先后指向不同的对象;二、指针可以定义时不用赋初值,遵循作用域的规则。
2、指针的值是存储指向对象的地址,要用取地址符&,具体形式是int *p=&a。指针的值共有四种状态:①指向一个对象;②指向紧邻对象所占空间的下一个位置;③空指针,没有指向任何一个对象;④不属于上面三种状态的任何一种,属于无效指针。
3、利用指针来访问对象;通过解引用符星号来访问对象;对解引用的所有操作,就是对指针指向的对象进行的操作。
4、空指针,有三种生成方式,不能用变量来直接来给指针赋值;①int *p=nullptr; ②int *p=0; ③//首先需要include cstdlib,int p=NULL;(通常不建议使用这种方式)。
5、void
指针:可以存放任何类型的对象的地址,因为未知对象的类型,所以不能对其指向的对象进行操作,没办法对对象进行访问。
6、在定义多个变量时,类型修饰符仅作用与被它修饰的变量,而不是作用于该定义语句中所有的变量。
7、通常在定义语句中,我们采用修饰符和变量名写在一起的形式。如:int *p;
8、指向指针的指针;因为指针a本身就是一个对象,其地址也可以被另一个指针b存储。那么指针b就是指向指针的指针,**则为指向指针的指针;同样解引用指针的指针会得到指针(原始对象的地址),再次解引用指针就能够访问原始对象的值;即运用两次解引用就可以得到原始对象的值,如两个星号接一个p。
9、指向指针的引用,因为指针就是个对象,也就是说可以引用指针;即int *&a=b,这时a是指针b的另外一个别名,那么在定义时也要像一般的定义指针形式一样。
10、离变量最近的一个修饰符是对变量的数据类型有最直接的影响。如int *&a=b,那么&是最近的,则a是引用类型。

猜你喜欢

转载自blog.csdn.net/qq_47466050/article/details/106347122