1、通过指针计算数组的元素(指针相减,类型需要一致),比如数组元素指针相减得到的是中间相差的元素个数,可以用于计算数组元素的个数等
#include "stdio.h"
#include <stdlib.h>
int main()
{
int a[10] = { 0 };
int* p = a;
for (int i = 0; i < sizeof(a) / sizeof(a[0]);i++) {
//*(p+i) = i;
a[i] = i;
}
for (int i = 0; i < sizeof(a) / sizeof(a[0]);i++) {
printf("%d=%d\n",i,a[i]);
}
int* pp = *(&a + 1) - sizeof(a[0]);
printf("%d\n",*pp);// 6
int* ppp = (int *)(&a + 1) -1;//两个1不一样 第一个1是数组长度,第二个是数组元素的长度
//&a+1 是针对元素的宽度的类型为int[10],转成一个元素的指针类型int *才能对元素的长度进行操作
printf("%d\n", *ppp);// 9
printf("%d\n", ppp - p);// 9
printf("%d\n", ppp - (p+1));// 8
printf("%d\n",*(p+3));//3
//printf("%d\n",*(p+pp));//err “ + ”: 不能添加两个指针
system("pause");
return 0;
}
2、两个指针想加没有意义(思考运营)
//printf("%d\n",*(p+pp));//err “ + ”: 不能添加两个指针