指针
一、指针的概念
指针即地址,一个变量的指针就是指该变量的地址。注意:指针变量中只能存放地址。
二、指针变量的定义和引用
1、指针变量的定义
int *p;  此语句定义了一个指针变量pp中可存放一个整型变量的地址。
注意: *是指针变量的特征只是分配了一个存储单元,并没有指真正指向,要想使一个指针变量指向一个整型变量必须赋值。例如::int *p,I=3;
          p=&I;
如果p=3就是错误的。
2、指针变量的引用(两个有关指针的运算符)
& 取地址运算符号 
* 指针运算符指针函数的作用      *p表示p所指向的变量值。
int *p,a;
p=&a;        /*指向变量a的值赋给p*/
scanf(“%d”,p);  /*从键盘输入一个值赋值给p所指向的变量a*/
*p=5;          /*5赋值给变量p所指向的a*/
三、指针作为函数参数
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中
四、指针与数组
1、一维数组的指针表示方法
1)数组中各元素的地址。
int a[10]={1,2,3,4,5,6,7,8,9,10};
&a[0]  &a[1]  &a[2] 、、、&a[i]、、、&a[9]
a      a+1    a+2  、、、a+i、、、、、a+9
2)数组元素值
a[0]    a[1]  a[2] 、、、、a[i]、、、、a[9]
*(a+0) *(a+1)  *(a+2)、、*(a+i)  *(a+9)
2、二维数组的指针表示方法
例:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
1、每行的起始地址
&a[0][0]  &a[1][0]  &a[2][0]
a[0]      a[1]    a[2]
  a+0      a+1      a+2
*a        *(a+1)      *(a+2)
&a[0]      &a[1]        &a[2]
2、各元素的地址
&a[0][0]    &a[0][1]  &a[0][2]
a[0]+1      a[0]+2    a[1]+2
*a+1        *(a+1)+1    *(a+2)+2
3、各元素的值
*(&a[0][0])    *(&a[0][1])    *(&a[0][2])
*(a[0]+1)      *(a[0]+2)      *(a[1]+2)
*(*a+1)        *(*(a+1)+1)    *(*(a+2)+2)
四、指针与数组;
  printf(“%d”,*p);
注意:
int (*p)[5]表示p是指针变量,它指向一个包含5个元素的一维数组
int *p[5] 是指针数组。
3、数组指针作为函数参数
数组名代表数组起始地址,用数组名作参数传递的是地址(将数组起始地址传递组被调用函数的形参),既然地址可以作为参数传递,那么指向数组的指针变量当然也可以作为函数参数。
五、字符串与指针
1、定义:
char  *s
2、初始化
char  *s=china;
只把china的首地址赋给指针变量s
4、输入、输出
  指针:char str1[20],*str2=str1;
        scanf(%s,str2);                printf(%s,str2);     
八、指针数组和指向指针的指针
1、指针数组
char  *s=china
char *name[5]={Li Fun,Zhang li,li tian,su fang ,wang le};     
2、指向指针的指针
char **p;表示指针变量p是指向一个字符指针变量。