指针运算

160 阅读1分钟

指针运算

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),即相差多少个元素

用指针来做什么:

  • 需要传入较大的数据时用作参数
  • 传入数组后对数组操作
  • 函数返回不止一个结果
  • 需要用函数来修改不止一个变量
  • 动态申请的内存