第 3 章 基本数据类型

18
第3第 第第第第第第 3.1 第第第第 3.2 第第第第第第 3.3 第第第第第 3.4 第第第第 3.5 第第第第 3.6 类类类类类 类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类 类类类类类类类类类类类类类 类类类类类类类类类类类类类类类类 ,。 类类类类类类类类 ,, 类类类类类类类类类类类类类类

Upload: ross

Post on 27-Jan-2016

97 views

Category:

Documents


8 download

DESCRIPTION

第 3 章 基本数据类型. 学习目的: ① 了解数据在计算机中的存储方式; ② 掌握常用数据类型变量及常量的使用。. 3.1 数据对象 3.2 基本数据类型 3.3 变量与常量 3.4 指针类型 3.5 引用类型 3.6 类型的意义. 程序中的数据被以某种形式存储在内存中,必须能被计算机识别和处理。高级语言程序中的数据被分为多个种类,以不同方式存储, 数据类型 决定了数据的存储方式。. 3.1 数据对象. 具有名字、存储地址和值等多个属性的实体。. 数据对象的属性决定了它所能容纳的不同值的数量和类型,同时也表明了这些值之间的逻辑组织和关系。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 3 章   基本数据类型

第 3 章 基本数据类型

3.1数据对象3.2基本数据类型 3.3变量与常量3.4指针类型3.5引用类型3.6 类型的意义

学习目的:① 了解数据在计算机中的存储方式;② 掌握常用数据类型变量及常量的使用。

程序中的数据被以某种形式存储在内存中,必须能被计算机识别和处理。高级语言程序中的数据被分为多个种类,以不同方式存储,数据类型决定了数据的存储方式。

Page 2: 第 3 章   基本数据类型

3.1 数据对象具有名字、存储地址和值等多个属性的实体。

...... ......

...... 00101001 00101001

Obj ...... Obj ......

数据对象: 标识为 Obj 的存储区

数据值: 程序中的数值 41

包含数据值 41 的数据对象 Obj

数据对象的属性决定了它所能容纳的不同值的数量和类型,同时也表明了这些值之间的逻辑组织和关系。

根据数据对象的值是否能被改变,将数据对象划分为:常量和变量。

Page 3: 第 3 章   基本数据类型

3.2 基本数据类型

3.2.1 整型与浮点型3.2.2 字符类型3.2.3 逻辑型3.2.4 空值型

类型说明符 类型名称 字宽 取 值 范 围bool 逻辑型(布尔型) 4(1) true, false

char 字符型 1 -128 ~ 127

int 整型 4 -2147483648 ~ 2147483647

long [int] 长整型 4 -2147483648 ~ 2147483647

float 单精度浮点型 4 6 位有效数字double 双精度浮点型 8 12 位有效数字

typedef int MYTYPE;int n=8, k, m[10];k=sizeof n;n=sizeof(float);k=sizeof(m);n=sizeof(MYTYPE);

Page 4: 第 3 章   基本数据类型

3.2.1 整型与浮点型整型

浮点型

......

地址增加方向

00H00H25H

→ 46H......

在计算机中整型数据以 8 位十六进制( 32位二进制)形式存储,所以取值范围 -23

1 ~ 231-1 。 对于 int n=9542;

内存中的 n 为十六进制数 02546 ;负数以二进制补码形式存储。

浮点型有单精度(说明符为 float )和双精度(说明符为 double )之分 。内部数据格式由符号位、指数和小数尾数等三个部分, float 的指数范围 2-127 ~ 2128 , double 的指数范围 2-102

3 ~ 21024 。

Page 5: 第 3 章   基本数据类型

3.2.2 字符类型字符类型数据的存储占据 1 字节

任何信息在内存中都是以数字的形式存储的,字符类型也不例外。不同字符根据编码规则被赋予不同的二进制整数。一般采用的编码规则是 ASCII 编码或扩展 ASCII 编码。例如:英文大写字母 A ~ Z 被编码为 41H ~ 5AH (即十进制的65 ~ 90 )。其它常用字符的编码见书中附录。

由于编码在字符之间建立起一种顺序关系,编码值小的字符在编码表中的位置靠前,可以通过比较字符编码的大小确定两个字符在编码表中的前后顺序,甚至有时可以把字符型数据做为一种特殊的整数使用。

Page 6: 第 3 章   基本数据类型

3.2.3 逻辑型

3.2.4 空值型

逻辑型 ( 说明符为 bool) 数据的取值只有代表逻辑真与逻辑假的两个值,有的语言使用整数 1 和 0 ,有的使用true 和 false ,有的使用非 0 和 0 。 Visual C++5.0后,逻辑型为内建类型,具有 true 和 false 两个值,在内存中分别以 1 和 0 标识,存储宽度为 1 字节。

空值型 ( 说明符为 void) 主要用于指针和函数返回值,表示数据类型的不确定性,而并不是指尚未赋值。空指针表示指针所指向数据的类型不确定。

Page 7: 第 3 章   基本数据类型

3.3 变量与常量

3.3.1 常量

3.3.2 变量

变量和常量通常都属于数据对象,具有值、存储地址、名字等属性。

程序中的变量和常量用于存储运算中间结果或特定数据,对数据等的处理通常表现为对变量和常量的具体运算和操作,因此与变量和常量相关的语法、规定等,对于程序设计十分重要。

Page 8: 第 3 章   基本数据类型

const int nTopIndex=10;const char cVisible='y';const char* MyName="Franklin";

3.3.1 常量 文字量、字面量常量

整型常量 浮点型常量 字符常量 字符串常量 符号常量

包括

字面量的取值与其字面含义

相同

十 进 制: 若干 0 ~ 9 数字,首位不能是 0 。例:345

八 进 制: 0 开始,后随若干数字 0 ~ 7 ,例:0456

十六进制: 0x 或 0X 开始,后跟若干数字及字母A ~ E ( a ~ e ),例: 0x134FA

小数点表示法 由整数和小数两个部分组成,也可只有整数部分或小数部分,例如, 1. 、 33.87 、 7.0 。

科学表示法 在小数后面加 E (或 e )及表示指数的整数,指数可以是负数,用于较大或较小的浮点数,例: 3.141e-8 、4e10

'a' 、 'B' 、 '#' 、 'a’=='\141’=='\x61' "My name is John""Item1\tItem2\tItem3 \n "

Page 9: 第 3 章   基本数据类型

3.3.2 变量

1. 变量的值

变量为值可以被改变的数据对象。变量具有变量名、变量值及类型等三要素。变量在程序中常用于暂存运算的中间结果或程序块之间的信息传递。

变量在使用前必须说明。在程序中使用赋值语句改变变量的值: nCount+=2; nCount=nCount*nCount;

注意:给变量赋初值是一个好习惯。

Page 10: 第 3 章   基本数据类型

3.3.2 变量2. 变量的定义

变量说明 Variable Declaration : 仅说明变量的类型,未指明变量值和存储地址;

变量定义 Variable Definition : 说明变量类型的同时为变量申请存储空间。

变量说明和变量定义之间的区别: 变量定义将被说明变量与其存储单元联系在一起。

常用的变量说明或变量定义格式为: <var_specifier> <var_list>;

其中: <var_specifier> 为变量类型说明符 <var_list> 为变量名表

Page 11: 第 3 章   基本数据类型

变量的地址为存储该变量值的存储空间首地址,通常指所占用存储区的第一个字或字节的地址。

变量的地址可以使用运算符 & 得到,这个地址值可以被输出或赋值给另一类变量—指针变量,如:int nIndex=8;cout<<"The address of nIndex is"<<&nIndex;int* pnIndex=&nIndex;

程序执行后将在屏幕上显示出变量 nIndex 的地址值:The address of nIndex is 0x××××××××

3.3.2 变量

3. 变量的地址

Page 12: 第 3 章   基本数据类型

3.4 指针类型

3.4.1指针定义3.4.2 指针的初始化3.4.3 指针运算3.4.4 指针与常量

指针是 C 语言与 C++ 的特色,使得程序员可以在程序中直接访问内存。

“指针”通指具有指针类型的变量,而指针类型是一大类特定数据类型的统称,指针持有相应类型数据的存储地址。

Page 13: 第 3 章   基本数据类型

3.4.1 指针定义对于类型 T, T* 被称为指向类型 T的指针类型(简称 T型指针),即具有类型 T* 的指针变量可以保持T型数据(变量、常量等)的内存存储地址。

变量 变量取值 变量地址

c

...

41H 0064FDEC

...

...

00

64

FD

pc→ EC XXXXXXXX

...

int* pInt; // 指向整型量的指针char** ppChar; // 指向字符型指针的指针int* pIndex[4]; // 整型指针数组,每个元素

// 中存放有整数指针int (*pCount)[3]; // 指向一维数组的指

// 针,该数组有 3 个元素

char c='A';char* pChar="abcde";char* pc=&c;

指针定义方法

分析下述指针定义的含义

Page 14: 第 3 章   基本数据类型

3.4.2 指针的初始化定义指针时把一个变量或常量的地址赋值给指针,称作指针初始化。

好的编程风格是每个指针都应该初始化为某个地址,或为 0 。

不同类型变量或常量的地址表达方式不同,对于基本类型变量、数组成员、结构成员等在其名字前加运算符 & ;数组的地址与其第一个元素的地址相同,用数组的名字表示;函数的地址为该函数的入口,用函数的名字表示,例如:

int a, b[10];

int *pa=&a; // &a 表示 a 的地址int *pb=b; // b 表示数组 b[10] 的首地址,此时 *pb 为数组中的第一个整数int *pbElement=&b[3]; // &b[3] 为数组元素 b[3] 的地址 int bb[4][3], (*pArray)[3];

pArray=bb;

Page 15: 第 3 章   基本数据类型

3.4.3 指针运算

1 指针与整数的运算

int n=3; int k=n+1; int* pn=&n; int* p=pn+1;

int a[5]={1, 2, 3, 4, 5};int* pn=a;pn+=2;

2 指针的增 1 (减 1 )

int a[5]={1, 2, 3, 4, 5};int* pn=a;pn+=2;

3 指针之间的减法

char Str[20]="My name is John."; char* pStart=Str, pEnd=Str; for(int i=0; i<20; i++) { if(*pEnd=='\0') break; *pEnd++; } cout<<"The length is "<<pEnd-pStart<<endl;

4 指针间的关系运算

两个同类型指针之间可以进行大小的比较,用以确定它们所指向数据的前后顺序。如两个指针相等说明它们指向同一个数据。当两个指针指向同一数组的元素时,如果指针的值不同,那么取值大的指针所指的元素位于取值小的指针所指元素之后 。

Page 16: 第 3 章   基本数据类型

3.4.4 指针与常量const char *p; 或 char const *p;

const char *p=0;const char cIndex='A';p=&cIndex; // 可以改变 p 的值*p='B'; // 错! 因为 p 所指的内容为常量,不能改变

char * const p;

char * const p="abcd";*(p+2)='A';p="hijk"; // 错! 因为 p 为常指针,不能改变

const char * const p;

const char * const p="abcd";*(p+2)='A'; // 错! p 所指内容为常量,不能改变p="hijk"; // 错! 因为 p 为常指针,不能改变

Page 17: 第 3 章   基本数据类型

3.5 引用类型

引用的定义格式通常如下: <TypeName> &<RefName>(<VariableName>);

或者 <TypeName> &<RefName>=<VariableName>;

其中 <TypeName> 是某种类型名,可以是除去引用类型之外的任何一种类型,比如整型、字符型、指针类型、结构和类等

int var(1);int &Ref=var;int &MyRef=2;

引用的应用更常见于函数的参数或函数的返回值类型。

Page 18: 第 3 章   基本数据类型

3.6 类型的意义

数据的存储 数据所允许的操作

函数重载 类型检查