《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;
}
明日计划:学习指针与数组的有关知识;