指针的实质就是地址,指针的变量就是用来存放地址的变量;指针有一级指针和二级指针之分。
一.一级指针的介绍
1. 指针变量的定义格式如下:
数据类型 *指针变量名
int *p; (p为指针变量名,类型为int)
char *ch; (ch为指针变量名,类型为char)
……
需要知道的是,指针变量只能用来存放地址;
* 表示这个变量是一个指针变量;
* 指针变量名,表示获取这指针变量指向的内存空间的内容;
int 表示这个指针变量只能存放int类型的变量的地址; 指针变量也有全局变量和局部的变量。
2. 指针变量的初始化和引用
指针变量的初始化可以分为4种,以下为指针变量的初始化和引用。
1)定义的同时并进行初始化
int *p=&a; (int 类型,指针名为p—p表示的是地址,把a的地址赋值给p);
可看出a的地址和p的值是一样的,说明把a的地址给了p这个指针变量.因为p是指针变量,也就是变量,既然是变量就可以重新赋值。即
其实质是,p指针的指向已经发生改变。
2)先定义指针变量,然后再初始化
int *p1;
*p1=&b;(b之前已定义过);
3)可以用一个已经存在的指针变量来初始化
4)给指针变量赋值为NULL;
其中,int *p5=NULL 表示指针变量 p5指向内存中地址为0的地方。
从上可以,* 使用的场合有两个:第一个是,用在定义变量的时候,表示定义的是一个指针变量;第二个是, *指针变量名,表示获取指针变量指向的内存空间的内容。
总结一下一级指针的知识:
int num=10;
int *p=num;
(p为指针变量,p的地址为&p,p的值为num的地址即&num)
二. 二级指针的介绍
以上介绍的是一级指针,接下来介绍的是二级指针的定义和使用。何为二级指针?二级指针就是用来存放指针变量的地址!
一级指针的定义:
数据类型 *指针变量名
int *p; (p为指针变量名,类型为int)
char *ch; (ch为指针变量名,类型为char)
二级指针的定义:
数据类型 **指针变量名
int **p; (p为二级指针变量名,类型为int)
另外,如果printf(“p1=%p\n”,p1)表示取p1得地址!
而且,二级指针只能存放一级指针变量的地址;如果直接把二级指针直接指向常量的地址是不可以的!如下:
从上图表明上面的那种定义是错误的,要注意不能犯!
当然还有三级指针,三级指针就是存放二级指针变量的地址! int ***p3=&p2;