学科分类
目录
C语言

算术运算

指针变量除了取址运算和取值运算以外,还包括指针与整数的加法运算、减法运算、自增运算、自减运算、同类指针相减运算,下面针对指针常用的算术运算进行详细讲解。

1、指针变量与整数相加、减

指针变量可以与整数进行相加或相减操作,示例代码如下:

p+n,p-n

上述代码中,p是一个指针变量,p+1表示将指针向后移动1个数据长度,移动的数据长度由定义的指针变量类型决定,也称为步长,若指针是int类型的指针,则p的步长为4字节,执行p+1,则p的值加上4个字节,即p向后移动4个字节。

为了帮助读者对指针变量与整数相加减操作的理解,下面通过一张图表示上述操作,假设p为int类型指针,则p与p+1的位置如图1所示。

图1 指针p+1的内存图解

由图1可知,变量a的地址是001,p的值也是001,当执行“p = p+1”时,因为p的基类型是int型,在内存中占4个字节,所以p+1后,p就指向了001后面4个字节的位置,即地址005的位置。

同样,指针也可以与整数进行相减运算,例如,在图1中,p指向地址005,执行p-1操作,则指针会重新指向地址001。

指针变量的加减运算实质上是指针在内存中的移动,需要注意的是,对于单独零散的变量,指针的加减运算并无意义,只有指向连续的同类型数据区域,指针加、减整数才有实际意义,因此指针的加减运算通常出现在数组操作、数据结构中。

2、指针表达式的自增、自减运算

指针类型变量也可以进行自增或自减运算,示例代码如下:

p++ , ++p //自增运算
p-- , --p //自减运算

上述代码中,指针运算可分为自增和自减运算,根据自增和自减运算符的先后可以分为先增(减)和后增(减)运算。自增和自减运算符在前面已经讲解过,在这里使用方法一样,不同的是其增加或减少指的是指针向前或向后移动。

指针的自增自减运算与指针的加减运算含意是相同的,每自增(减)一次都是向后(前)移动一个步长,即p++、++p最终的结果与p+1是相同的。

3、同类型指针相减运算

同类型指针可以进行相减操作,示例代码如下:

pm-pn

上述代码中,pm和pn是两个类型相同的指针变量。同类型指针进行相减运算其结果为两个指针相差的步长。例如,有连续内存空间上的两个int类型指针pm与pn,若pm与pn之间相差8个字节,则pm-pn结果为2,这是因为int类型指针的步长为4,两个指针相差8字节,则是2个步长。

需要注意的是,同类型指针之间只有相减运算,没有相加运算,两个地址相加是没有意义的,此外,不同类型指针之间不能进行相减运算。

img小提示:指针算术运算的本质

指针算术运算与一般的算术运算的区别是,指针的算术运算是一种具有数值和数据类型的运算,即加上或减去整数值是以指针变量类型大小为单位进行的运算。这种运算方式常用于连续内存空间的相关操作,如数组、动态内存分配的空间。*

点击此处
隐藏目录