正在加载图片...
3.2指针类型与地址算法 3.2.1指针的概念与定义 在对变量进行定义时,编译器都为其分配一块内存单元,该内存单元中存放该变量的值, 而该内存单元还具有确定的地址,通过该地址可以实现对该内存单元的访问。指针便是存放 一个对象在内存中的地址的。指针是非常有用。通过指针,可以直接对内存中各个不同数据 类型的数据进行快速地处理,并为函数之间各类数据传递提供了简捷便利的途径。通过指针 可以方便地创建链表和管理动态对象等。正确熟练地使用指针能够编写出简洁有效、功能强 大的高质量程序。但是指针的使用比较复杂,易留下一些不易察觉的隐患,最终导致程序的 瘫痪。 指针变量是用来存放内存地址的,其内容是内存中的一个地址。通过指针可以实现对内 存中相应变量和函数等的访问。每一个指针都有一个相应的类型,该类型是说明指针所指向 的内存单元中所存放的数据为数据类型。但是,不同类型的指针在内存中占用的空间大小都 是相同的,即指针本身不确定其占用内存区域的大小及数据存放规律。指针的类型告诉编译 器在编译指针所指向对象的二进制序列按什么规律进行翻译并翻译多少位。 先介绍两个与指针运算有关的运算符。运算符“*”称为取值运算符,它的作用是访问 地址的内存单元,“*指针变量名”是对该内存单元中的数据进行访问;运算符“&”称为取 址运算符,“&变量名”是取得某变量的地址。取值运算“*”和取地址运算“&”是一对互 逆运算。 定义指针变量的语法结构如下: type*variblel, *varible, .. *varible; 其中type是指针的类型,即该指针变量所指向的内存单元中所存储的数据为数据类型。 而存储类型则是指针型变量自身的存储类型。定义语句中变量名前加“*”号,表明该变量 被定义为指针变量,要注意此处的“*”号和执行语句中的“*指针名”之间的区别 注意:在一个定义语句中同时对若干个指针变量进行定义时,在用逗号分隔的定义表中, 每个指针变量前都必须加上取值运算符“*”。 在对指针变量进行读取操作之前必须对它进行初始化。一个指针可以被一个具有相同类 型的对象进行初始化,这个相同类型的对象可以是一个同类指针变量,也可以对相应类型的 变量用取址操作符获得其地址。例如: int val=512 int* ptI=&val int"pt2=ptl; C++是一种具有强类型检査机制的语言,所有在初始和赋值中出现的数据都将在编译时 受到检査,看它们是否与所需的类型正确匹配。如果不匹配但满足某一转换规则,则编译器 会按照这一规则自动进行类型转换;否则是十分不安全的,它将导致一个编译错误。最好不 要依赖编译系统的自动转换,而由程序员用显示地强制类型转换来完成指针类型之间的转 换 强制类型转换的形式为 (目标类型*)变量名 例如: int varl=10 int *var=&varl str=(char *)var; //error3.2 指针类型与地址算法 3.2.1 指针的概念与定义 在对变量进行定义时,编译器都为其分配一块内存单元,该内存单元中存放该变量的值, 而该内存单元还具有确定的地址,通过该地址可以实现对该内存单元的访问。指针便是存放 一个对象在内存中的地址的。指针是非常有用。通过指针,可以直接对内存中各个不同数据 类型的数据进行快速地处理,并为函数之间各类数据传递提供了简捷便利的途径。通过指针 可以方便地创建链表和管理动态对象等。正确熟练地使用指针能够编写出简洁有效、功能强 大的高质量程序。但是指针的使用比较复杂,易留下一些不易察觉的隐患,最终导致程序的 瘫痪。 指针变量是用来存放内存地址的,其内容是内存中的一个地址。通过指针可以实现对内 存中相应变量和函数等的访问。每一个指针都有一个相应的类型,该类型是说明指针所指向 的内存单元中所存放的数据为数据类型。但是,不同类型的指针在内存中占用的空间大小都 是相同的,即指针本身不确定其占用内存区域的大小及数据存放规律。指针的类型告诉编译 器在编译指针所指向对象的二进制序列按什么规律进行翻译并翻译多少位。 先介绍两个与指针运算有关的运算符。运算符“*”称为取值运算符,它的作用是访问 地址的内存单元,“*指针变量名”是对该内存单元中的数据进行访问;运算符“&”称为取 址运算符,“&变量名”是取得某变量的地址。取值运算“*”和取地址运算“&”是一对互 逆运算。 定义指针变量的语法结构如下: type *varible1,*varible2,….,*variblen; 其中 type 是指针的类型,即该指针变量所指向的内存单元中所存储的数据为数据类型。 而存储类型则是指针型变量自身的存储类型。定义语句中变量名前加“*”号,表明该变量 被定义为指针变量,要注意此处的“*”号和执行语句中的“*指针名”之间的区别。 注意:在一个定义语句中同时对若干个指针变量进行定义时,在用逗号分隔的定义表中, 每个指针变量前都必须加上取值运算符“*”。 在对指针变量进行读取操作之前必须对它进行初始化。一个指针可以被一个具有相同类 型的对象进行初始化,这个相同类型的对象可以是一个同类指针变量,也可以对相应类型的 变量用取址操作符获得其地址。例如: int val=512; int *pt1=&val; int *pt2=pt1; C++是一种具有强类型检查机制的语言,所有在初始和赋值中出现的数据都将在编译时 受到检查,看它们是否与所需的类型正确匹配。如果不匹配但满足某一转换规则,则编译器 会按照这一规则自动进行类型转换;否则是十分不安全的,它将导致一个编译错误。最好不 要依赖编译系统的自动转换,而由程序员用显示地强制类型转换来完成指针类型之间的转 换。 强制类型转换的形式为 (目标类型 *)变量名 例如: int var1=10 char *str; int *var=&var1; str=(char *)var;//error
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有