C语言精要总结-指针系列(二)
此文为指针系列第二篇:
C语言精要总结-指针系列(二)
指针运算
前面提到过指针的解引用运算,除此之外,指针还能进行部分算数运算、关系运算
指针能进行的有意义的算术运算包括加减法运算,但不包括乘除运算。并且运算存在诸多限制。
加法运算
指针加法运算只适合指针与整数,不能用在指针与指针。
指针加上或者减去一个整数n,是存储的地址值加上或者减去n*指针指向类型的空间大小。也就是
结果指针 = 指针 ± n * 指针指向类型空间大小。
例如int类型的整数指针+1,运算结果依然是一个整型指针,其存储的地址值为原指针值+1*4,这是因为整型变量占用4个字节的空间。这个计算结果,恰好在当前指针指向基础上,向下偏移指向下一个相同类型的空间。如下图
指针与整数的加减法一般用在迭代连续的内存空间-数组,如果运算得到的指针指向第一个元素之前或者最后一个元素之后,可能会产生非法读写内存中断,就像引用一个未初始化的指针一样不可预知。
指针除了可以与整数做加减运算,连个指针之间还可以做减法运算(不能做加法运算)且必须是同类型的指针。运算结果为两个指针指向地址之间,可以存放多少此类型的变量数(或其相反数),类型为ptrdiif_t类型(一种有符号整数类型)。
网友评论