1.指针:内存地址
指针变量:专门用一个变量来存放指针,这种变量成为指针变量。因此,一个指针变量的值就是某个内存单元的地址(或指针)
“指针”是指地址,是常量,“指针变量”是指取值为地址的变量
2.二级指针
指针变量中主要存放目标变量的地址,这种指针称为一级指针。如果指针变量中存放的不是变量的地址,而是存放一级指针变量的地址,则这种指针称为二级指针。
格式:
【存储类型】 数据类型符 **变量名;
例如:
int a=5;
int *p1;
int **p2;
p1=&a;
p2=&p1;
**p2=5;
例子:利用二级指针来处理字符串
#include <stdio.h>
#define NULL 0
void main()
{
char **p;
char *name[]={"hello","good","world","bye"," "};
p=name+1;
printf("%x:%s ",*p,*p);
p+=2;
while(**p!=NULL)
printf("%s\n",*p++);
}
运行结果:42003C:good bye
解释:第一个*p是输出p所指向的指针的地址(以十六进制形式%X输出),即字符串“good”的首地址。第二个*p是输出p的内容(即name[1])所指向的字符串(即"good")
二级指针与指针数组的关系
如:int **p;与*q[10];之间的关系
指针数组名是二级指针常量;
p=q;p+i是q[i]的地址;
指针数组作形参时,int*q[]与int**q完全等价;但作为变量定义两者不同;
系统只给p分配能保存一个指针值得内存区;而给q分配10块内存区,每块可保存一个指针值
原文:http://www.cnblogs.com/919czzl/p/4039145.html