指针的加减法

指针的加减法

指针的算数运算中,指针之间的加法没有意义,但是指针可以加减一个常量获取列表元素的地址。

指针的减法通常使用方法为 大数减小数 。即高地址减去低地址,所求结果为偏移。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
#include<stdlib.h>

int main() {
int* p1 = (int*)12;
int* p2 = (int*)20;
int* n1 = 0;

n1 = p1 + 1;
printf("p1 + 1 = %d\n", n1);

n1 = p1 - 1;
printf("p1 - 1 = %d\n", n1);

//n = p1 + p2; //表达式必须具有整形或未区分范围的枚举类型
//指针与指针不能做加法

unsigned int n2 = 0;

//指针相减通常不用小数减大数
n2 = p1 - p2;
printf("p1 - p2 = %d\n", n2);

n2 = p2 - p1;
printf("p2 - p1 = %d\n", n2);

//指针的值相减得到的是偏移
n2 = (int)p1 - (int)p2;
printf("(int)p1 - (int)p2 = %d\n", n2);

n2 = (int)p2 - (int)p1;
printf("(int)p2 - (int)p1 = %d\n", n2);

system("pause");
return 0;
}

运行结果图:
指针加减法

有关于p1 p2的值为什么为4的倍数:

在进行指针减法之后值要处于指向类型的大小。当值为10和20时,就会出现-3和2,因为10/4=2.5值是被四舍五入后的结果。