指针的加减法
指针的加法
需要调整,调整的权重为sizeof(指针去掉一个*)
int *p;p++;加sizeof(int)
short *p;p++;加sizeof(short)
double *p;p++;加sizeof(double)
int *p=(int *)2000;
printf("%d\n",p+2); //2008
printf("%d\n",(short *)p+2); //2004
printf("%d\n",(float *)p+2); //2008
printf("%d\n",(double **)p+2); //2008
printf("%d\n",(char *)p+2); //2002
printf("%d\n",(unsigned long)p+2); //2002
指针+指针
不可以
指针-数字
指针减法需要调整,调整的权重为sizeof(指针去掉一个*)
指针-指针
合法,表示间隔的单元数,需要调整
前提条件:
1、同类型的两个指针(不同类型的,在某些情况下也可以做减法)
2、它们都指向同一个数组的数组元素,或者是指向这个数组最后一个元素的下一个同类型的量
分两步:
1.算出间隔字节数
2.除以调整权数
需要记住p[i]=*[p+1]=arr[i]
思考题:
讲一个数组的值赋给另一个数组:
void Mystrcpy(char *des,char *src)
{
while(*des++=*src++);
}
注:需注意++的优先级高于*
除非在数组内部,在确认一个指针减1确实指向某个数据对象的前提下,否则指针减1是没有意义的。