指针运算
PS:
1.* 的优先级低于++
2.*p++表示取出p所指的值,并且p向前移一位
3.当指针没有初始化时一般把指针赋个NULL(0地址)
4.0地址不能随便碰!!!
5.指针是地址所以大小都相同,但是不同类型的指针不能相互赋值!!!
6.但是指针能进行强制类型转化,void*表示指向不知道什么类型的指针
{
int i;
int *p=&i;
void *q=(void *)p;
}
加法(只有当指针指向一片连续的区域或者指向数组才有意义)(加一个整数,减法,自增,自减也是同样道理):
int a[]={0,1,2,3,4,5,6,7,8,9};
int *p=a;
int *p1=a[5];
printf("p = %p\n",p);//打印出了p的地址
printf("p+1 = %p\n",p+1);//p+1的地址为p的地址加上sizeof(int)
printf("*p = %d\n",*p);//打印出a[0]的值
printf("*(p+1) = %d\n",*(p+1));//打印出a[1]的值
printf("*(p+n) = %d\n",*(p+n));//打印出a[n]的值
printf("p1-p = %d\n",p1-p);//计算两个指针相减的差不是直接将地址相减,而是地址的差值除于sizeof(int),即相差多少个元素
用指针来做什么:
- 需要传入较大的数据时用作参数
- 传入数组后对数组操作
- 函数返回不止一个结果
- 需要用函数来修改不止一个变量
- 动态申请的内存