021day(指针的运算和指针作为函数参数的用法)

来源:互联网 发布:以前的淘宝订单不见了 编辑:程序博客网 时间:2024/06/18 18:09

172210704111-陈国佳总结《2017年10月31日》【连续021天】

标题:指针的运算和指针作为函数参数的用法

内容:A.观看MOOC8.3,8.4

           B.(a).1.两个同类型的指针变量可比较大小;地址p1<地址p2与p1<p2的值为真  等价(可推出其他情况);

2.两个同类型的指针变量,可以相减  两个T*类型的指针 p1和p2        p1 -p2=(地址p1 -地址p2)/ sizeof(T)  //p1和p2之间可以塞多少个T变量

3.指针变量加减一个整数的结果是指针;   T *p;int n;         p + n :  T*类型的指针,指向地址: 地址p + n*sizeof(T) ,同理可推n+p,p-n,*(p+n),*(p-n);

4.指针变量可自增,自减;T*p    p++,++p :p指向n+sizeof(T)             p--,p--:p指向n-sizeof(T)

5.指针可以用下标运算符“[ ]”进行运算; T*p ;  int n;       p[n]等价于*(p+n)  //即地址p+n所对应的量

例题:访问int型变量 a 前面的一个字节

int a;

char * p=(char *) &a;//char类型的大小为1字节         //&a是int *类型

--p;

printf("c%",*p); //可能导致运行出错

* p='A';     //同上

如:int*p1,*p2; int n =4;
char *pc1,*pc2;
p1 =(int*) 100;
p2 =(int*) 200;
cout<<"1)"<<p2-p1<<endl;
pc1 =(char *)p1;
pc2 =(char *)p2;
cout<<"2)"<<pc1-pc2<<endl;
cout<<"3)"<<(p2+n)-p1<<endl;
int*p3=p2+n;
cout<<"4)"<<p3-p1<<endl;
cout<<"5)"<<(pc2 -10)-pc1<<endl;
return 0;


         (b).地址0不能访问,指向地址0的指针就是空指针;“NULL”可对任何类型的指针赋值;NULL实际上就是整数0,值为NULL的指针就是空指针;

指针可作为条件表达式使用,指针值为NULL,则为假,反之,为真;if (p) 等价于 if(p!=NULL)          if(!p)等价于if(p==NULL)   

指针作为函数参数:

如:     void Swap(int *p1,int *p2)
{
int tmp=*p1;
*p1=*p2;
*p2=tmp;
}
int main()
{
int m =3,n=4;
Swap(&m,&n); //使得p1指向m,p2指向n //p1,p2指向的地址不变,内容交换了;即*p1,*p2不变,即实参未变; 
cout<<m<<" "<<n<<endl;
return 0; 
}


明日计划:学习指针与数组的有关知识;