正在加载图片...
个指针可以赋零值(NULL),表明该指针不指向任何一个对象,称为空指针 ++中还提供了一种通用的指针类型void*,它将使指针有能力指向任何类型的对象。 3.2.2指针变量的运算规则 指针的运算是按指针所持有的地址变量所进行的,其运算的实质是地址的计算。它只包 括一部分的算术运算、关系运算和赋值运算 1、指针的算术运算 指针的算术运算只有两种加法和减法(地址值加减)。而指针的加减算术运算也仅支持 指针变量与整数相加或用一个指针变量减去一个整数的运算,不允许将两个指针相加,也不 允许将浮点数或双精度数等与指针相加减 假设pt是一个指针变量,指针中保存的内存地址为d,它所指向的数据的数据类型在内 存中占用的字节数为n,则算术运算:pt土m的结果值为d±m*n地址值。 例如:若pt是一个指向整型变量的指针,其保存的地址值是2000而整型数据在内存 中所占用的内存单元为2=n,若在算术运算中取m=5,则pt5获得的地址值为2010,而不 是2005。 值得注意的是,在8088/8086系列微机上进行指针的算术运算时,其运算次数是有限的, 不能对指针进行无休止的加减法运算 2、指针的关系运算 两个指向同一数据类型的指针之间的关系运算表示它们所指向的内存单元的地址位置 之间的关系(前后关系)。内存单元在内存中的排列是有一定顺序的,指向排在较前面的内 存单元的指针小于指向排在较后面的内存单元的指针。 关系运算符:<、<=、>、 =、!=。 注意:(1)指向不同类型数据的指针之间的比较是没有意义的,而指针与一般其他类型 的常量或变量之间的关系运算也是没有意义的,除非变量中的内容表示的是地址量 (2)任何类型的指针变量都可以和零进行相等或不相等的关系运算(判是否为空 指针)。 (3)由于具有不同的内存模式,在8088/8086系列微机上进行指针的关系运算 时,除了指针和零(空指针)之间的相等与不相等运算比较安全之外,其他同类型指针的关 系运算有时不一定可靠。要实现指针之间的可靠比较,需要对内存的“分段”、“分页”、“逻 辑地址”、“物理地址”,“近地址”、“远地址”和存储管理模式的“实模式”、“保护模式”等 概念有一个正确清晰的认识。 3、指针的赋值运算 指针的赋值运算可以分为两类:为指针变量本身赋值及为指针所指向的对象赋值。 在为指针本身赋值时,所赋予的值必须是地址常量或地址变量,不能是普通的整数,除 非该整数本身就表示地址值。但仍然要进行强制转换。 为指针本身赋值常用的有以下几种形式: (1)、把一个变量的地址赋予一个指向相同数据类型的指针,如 double val, " pt (2)、把一个指针的值赋予另一个执行相同数据类型的指针,使这两个指针指向相同的 内存单元,如 float*ptl, " pt2一个指针可以赋零值(NULL),表明该指针不指向任何一个对象,称为空指针。 C++中还提供了一种通用的指针类型 void *,它将使指针有能力指向任何类型的对象。 3.2.2 指针变量的运算规则 指针的运算是按指针所持有的地址变量所进行的,其运算的实质是地址的计算。它只包 括一部分的算术运算、关系运算和赋值运算。 1、指针的算术运算 指针的算术运算只有两种加法和减法(地址值加减)。而指针的加减算术运算也仅支持 指针变量与整数相加或用一个指针变量减去一个整数的运算,不允许将两个指针相加,也不 允许将浮点数或双精度数等与指针相加减。 假设 pt 是一个指针变量,指针中保存的内存地址为 d,它所指向的数据的数据类型在内 存中占用的字节数为 n,则算术运算:pt±m 的结果值为 d±m*n 地址值。 例如:若 pt 是一个指向整型变量的指针,其保存的地址值是 2000,而整型数据在内存 中所占用的内存单元为 2=n,若在算术运算中取 m=5,则 pt+5 获得的地址值为 2010,而不 是 2005。 值得注意的是,在 8088/8086 系列微机上进行指针的算术运算时,其运算次数是有限的, 不能对指针进行无休止的加减法运算。 2、指针的关系运算 两个指向同一数据类型的指针之间的关系运算表示它们所指向的内存单元的地址位置 之间的关系(前后关系)。内存单元在内存中的排列是有一定顺序的,指向排在较前面的内 存单元的指针小于指向排在较后面的内存单元的指针。 关系运算符:<、<=、>、>=、 = =、!=。 注意:(1)指向不同类型数据的指针之间的比较是没有意义的,而指针与一般其他类型 的常量或变量之间的关系运算也是没有意义的,除非变量中的内容表示的是地址量。 (2)任何类型的指针变量都可以和零进行相等或不相等的关系运算(判是否为空 指针)。 (3)由于具有不同的内存模式,在 8088/8086 系列微机上进行指针的关系运算 时,除了指针和零(空指针)之间的相等与不相等运算比较安全之外,其他同类型指针的关 系运算有时不一定可靠。要实现指针之间的可靠比较,需要对内存的“分段”、“分页”、“逻 辑地址”、“物理地址”,“近地址”、“远地址”和存储管理模式的“实模式”、“保护模式”等 概念有一个正确清晰的认识。 3、指针的赋值运算 指针的赋值运算可以分为两类:为指针变量本身赋值及为指针所指向的对象赋值。 在为指针本身赋值时,所赋予的值必须是地址常量或地址变量,不能是普通的整数,除 非该整数本身就表示地址值。但仍然要进行强制转换。 为指针本身赋值常用的有以下几种形式: (1)、把一个变量的地址赋予一个指向相同数据类型的指针,如: double val,*pt; pt=&val; (2)、把一个指针的值赋予另一个执行相同数据类型的指针,使这两个指针指向相同的 内存单元,如: float *pt1,*pt2;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有