购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.8.3 指针的地址计算

指针的地址计算包括以下几个方面的内容。

(1)赋初值

指针变量的初值可以是NULL(0),也可以是变量、数组、结构以及函数等的地址。例如:

(2)指针与整数的加减

指针可以与一个整数或整数表达式进行加减运算,从而获得该指针当前所指位置前面或后面某个数据的地址。假设p为一个指针变量,n为一个整数,则p±n表示离指针p当前位置的前面或后面第n个数据的地址。

(3)指针与指针相减

指针与指针相减的结果为一整数值,但它并不是地址,而是表示两个指针之间的距离或元素的个数。注意,这两个指针必须指向同一类型的数据。

(4)指针与指针的比较

指向同一类型数据的两个指针可以进行比较运算,获得两个指针所指地址的大小关系。

此外,在计算指针地址的同时,还可进行间接取值运算。不过在这种情况下,间接取值的地址应该是地址计算后的结果,并且还必须注意运算符的优先级和结合规则。设p1、p2都是指针,对于

a=*p1++;

由于运算符*和++具有相同的优先级而指针运算具有右结合性,按右结合规则,有++、*的运算次序,而运算符++在p1的后面,因此上述赋值运算的过程是首先将指针p1所指的内容赋值给变量a,然后p1再指向下一个数据,表明是地址增加而不是内容增加。对于

a=*-p1;

与上例相同,按右结合规则有--、*的运算次序,而运算符--在p1 的前面,因此首先将p1减去1,即指向前面一个数据,然后再把p1此时所指的内容赋值给变量a。对于

a=(*p2)++;

由于使用括号()使结合次序变为*、++,因此首先将 p2 所指的内容赋值给变量 a,然后再把p2所指的内容加1,表明是内容增加而不是地址增加。

例2-45 指针运算的例子。

程序执行结果:

例2-46 两指针相减——计算字符串长度的函数。

程序执行结果:

lenth of'abcdef'=6

需要指出的是,指针的运算是很有限的,它只能进行如上所述的四种运算操作,除此之外所有其他指针运算都是非法的。特别强调一点,不允许对两个指针进行加、乘、除、移位或屏蔽运算,也不允许用float类型数据与指针做加减运算。 eNjs5lftkjcTiH5v8HMRNMTcA0eKYFrVzD8PIY3gzA+yri0aBrHoVc+ez/bK7dCn

点击中间区域
呼出菜单
上一章
目录
下一章
×