C语⾔指针与指针之间的加减运算
知识点:
sizeof 指针(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");
return0;
}