在C语言中,指针运算是对指针变量进行的一系列操作,主要包括以下几种:
- 指针可以与整数进行加法和减法运算。其本质是根据指针所指向的数据类型的大小,对指针所存储的地址值进行相应的偏移。例如,有一个指向`int`类型的指针`p`,如果`p`当前指向地址为`0x1000`,在32位系统中`int`类型通常占4个字节,那么`p + 1`实际上是将指针`p`的地址值增加4个字节,即`p`将指向地址`0x1004`。减法运算同理,`p - 1`会使指针`p`的地址值减少4个字节,指向`0x0FFC`。
- 指针的自增(`++`)和自减(`--`)运算与指针和整数的加减运算类似。前置自增`++p`会先将指针`p`的地址值增加相应数据类型的字节数,然后返回增加后的指针值;后置自增`p++`则是先返回指针`p`的当前值,然后再将`p`的地址值增加相应数据类型的字节数。自减运算`--p`和`p--`的原理与自增运算相同,只是地址值是减少相应数据类型的字节数。
- 只有当两个指针都指向同一个数组中的元素时,它们之间的减法运算才有意义。两个指针相减得到的是它们所指向的元素在数组中的下标差值。例如,指针`p1`指向数组`arr`的第3个元素,指针`p2`指向数组`arr`的第5个元素,那么`p2 - p1`的结果为2,表示`p2`所指元素与`p1`所指元素之间相隔2个元素。需要注意的是,指针之间不能进行加法、乘法、除法等其他算术运算。
- 指针可以进行关系运算,如`>`、`