您的位置:首页 > 编程语言 > C语言/C++

C语言的技术博客日记4

2018-04-05 18:12 411 查看
指针的算术运算:
1.指针+数字(有意义):需要调整,调整的权重(格子的大小)为sizeof(指针去掉一个*)
  指针+1(向后移动):不是加一个字节或者加整个数组,而是加一个单元格
2.指针-数字(有意义):需要调整,调整的权重(格子的大小)为sizeof(指针去掉一个*)
   指针-1(向前移动):减一个单元格
eg:
int *p=(int *)0x2010;//0x2010为十六进制
printf("%x\n",p-2);//2016-(2*sizeof(int))=2016-2*4=2008

printf("%x\n",(short *)p-2);//2016-(2*sizeof(short))=2016-2*2=200c
printf("%x\n",(unsigned long *)p-2);//2016-(2*sizeof(unsigned long))=2016-2*4=2008

printf("%x\n",(long long **)p-2);//去掉一个*后,变为一级指针,而一级指针占4个字节,即为2016-2*4=2008

printf("%x\n",(float *)p-2);//2016-(2*sizeof(float))=2016-2*4=2008

printf("%x\n",(double *)p-2);//2016-(2*sizeof(double))=2016-2*8=2000

printf("%x\n",(char *)p-2);//2016-(2*sizeof(char))=2016-2*1=200e

printf("%x\n",(unsigned long )p-2);//是数字,不是指针,直接减去,即为2016-2=200e

3.指针+指针(非法无意义)
4.指针-指针(有意义) : 表示间隔的单元个数(不是字节数)
   方法:(1)算出字节数 (2)除以调整的权重
总结:指针的所有算术运算都需要调整,调整的权重为sizeof
eg:
int arr[10] ;
int *p= &arr[1];//x+4
int *q=&arr[9];//x+36
printf("%d\n",p-q);//字节数为32,-32/(sizeof(int))=-32/4=-8
printf("%d\n",q-p);//32/(sizeof(int))=32/4=8

printf("%d\n",(short *)q-(short *)p);//32/(sizeof(short))=32/2=16

printf("%d\n",(double *)q-(double *)p);//32/(sizeof(double))=32/8=4

printf("%d\n",(int ***)q-(int ***)p);//去掉一个*后,变为二级指针,占4个字节,即为32/4=8

printf("%d\n",(char **)q-(char **)p);//去掉一个*后,变为一级指针,占4个字节,即为32/4=8

printf("%d\n",(long)q-(long)p);//是数字,不是指针,直接计算为32
5.
void Mystrcpy(char *des ,char *src)
{
   int = i;
   for( I=0;src[I]!='\0';I++)
   {
        des[i]=src[I];
   }
   des=[i] ='\0';
}
字符串的判断依据:字符串结尾带'\0'
"[ ]"自带解引用
p [i] == *(p+i)
*(arr+i) == arr [i]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: