知识点:
(1)指针和指针可以做减法操作,但不适合做加法运算;
(2)指针和指针做减法适用的场合:两个指针都指向同一个数组, 相减结果为两个指针之间的元素数目,而不是两个指针之间相差的字节数。
比如:int int_array[4] = {12, 34, 56, 78};
int *p_int1 = &int_array[0];
int *p_int2 = &int_array[3];
p_int2 - p_int1 的结果为 3,即是两个之间之间的元素数目为 3 个。
如果两个指针不是指向同一个数组,它们相减就没有意义。
(3)不同类型的指针不允许相减,比如
char *p1;
int *p2;
p2-p1 是没有意义的。
例题:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
/*
(1)使用“指针-指针”的方式计算整数数组元素的偏移值;
*/
int main(void) {
int ages[] = { 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 };
int ages1[] = { 28, 29, 30, 31 };
int len = sizeof(ages) / sizeof(ages[0]);
int *zeng = ages + 6;
int *yong = ages + 9;
printf("yong - zeng = %d\n", yong - zeng);
printf("zeng - yong = %d\n", zeng - yong);
zeng = ages + 6;
yong = ages1 + 3;
printf("zeng: %p yong: %p yong-zeng: %d\n", zeng, yong, yong - zeng);
system("pause");
return 0;
}