理论教育 C语言指针运算及比较规则

C语言指针运算及比较规则

时间:2023-11-21 理论教育 版权反馈
【摘要】:指针变量的运算比较特殊,假设有下面的定义:指针的自增。指针的自减运算过程同上。C语言允许两个指针变量做减法运算,其目的是得到两个指针变量所指向的两个变量的内存区相隔的距离。两个指针变量关系运算表示各自所指向内存单元之间的位置关系。指针变量可以和0进行比较。

C语言指针运算及比较规则

指针变量的运算比较特殊,假设有下面的定义:

(1)指针的自增。例如,p++, ++p可以推广到p + 2 ,……

指针的自增运算过程如下:

因为p的值是&x,即x的地址。假设x的地址为0x3000(与3000H含义相同,均为十六进制表述),这里x为整型占4个字节,则变量x所占用的内存之后的首字节地址为0x3004,p ++(等价于p=p+1)的值仍然是地址,其值为0x3004(而不是0x3001),p+2的值为0x3008,依此类推,p+3的值为0x300c。这里指针的自增是以存放的变量的类型所占内存的大小为一个自增单位,如图9-4所示。

(2)指针的自减。例如,p--,--p可以推广到p-2,……指针的自减运算过程同上。

因为p的值是&x,即x的地址。假设x的地址为0x3000,这里x为整型占4个字节,则变量x所占用的内存之前的首字节地址为0x2ffc,p--(等价于p=p-1)的值仍然是地址,其值为0x2ffc(而不是0x2fff) , p-2的值为0x2ff8,依此类推,p-3的值为0x2ff4。这里指针的自减仍然是以存放的变量的类型所占内存的大小为一个自减单位,如图9-5所示。

(3)减法运算。C语言允许两个指针变量做减法运算,其目的是得到两个指针变量所指向的两个变量的内存区相隔的距离。例如:

图9-4 指针的自增

(www.daowen.com)

图9-5 指针的自减

假设p的值为0x3004,q的值为0x3000,则p-q的结果是1(不是4),表示以int类型所占内存大小为单位。

注意:不允许将两个指针变量做加法、乘法、除法运算,也就是说p+q,p*q,p/q等是非法的表达式。

(4)指针变量的关系运算。两个指针变量关系运算表示各自所指向内存单元之间的位置关

系。例如:

假设p1和p2是两个指针变量,则

p1 == p2表示p1和p2指向同一内存单元。

p1 > p2表示p1处于高地址位置。

p1 <p2表示p1处于低地址位置。

指针变量可以和0(或NULL)进行比较。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈