指针也是一种变量,是用来存放地址的。

可以间接操作变量,

NULL空地址和0是等价的

在程序执行过程中可以指向任意地址

指针变量的命名规则和其他变量的命名规则一样
指针不能与现有变量同名
指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址
若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址
应为指针指定一个地址后,才能在语句中使用指针
指针是一个变量,可以在程序执行过程中改变它的值,即可以改变指针的指向。可以在某时刻指向变量x,也可以在另一时刻指向变量y

指针不初始化的危害;

初始化是指定义并赋值

 #include<stdio.h>
   int main()
   {
       int *pa;//野指针
   printf("pa=%p\n",pa);
   printf("*pa=%d\n",*pa);
//段错误:操作了非法的内存

*pa+=10;

   return 0;
   }

指针变量所占内存地址都是4个字节

指针的运算;

1.指针和指针

 #include<stdio.h>
  int main()
  {
     int a=12;
       int b=34;
       int *pa=&a;
      int *pb=&b;
      int c=pa+pb;
       return 0;
  }
~         

两个地址相加没有意义 error

把int c=pa+pb换成int c=pa-pb不会报错。因为int c=pa-pb是表示2个地址的距离,是有意义的。

2.指针和整数的加和减就是地址的偏移

 偏移量=n*sizeof(type)   

&arr  :整个数组的首地址  偏移量 5*sizeof(int)                                                                                          

&arr+1  VS  &(arr+1)                                                                                                          

&(arr+1)是不成立的,不能取地址的地址

指针与数组的等价关系

如果int  *p=arr则

pa 等价于 &arr[i]

*pa 等价于   arr[0]

int *pa 存放 int 或int[]