指针型数据
指针型数据
一、有关指针的数据类型(见下表)
定义 含义
int i; 定义整型变量i。
int *p; p为指向整型变量的指针变量。
int a[n]; 定义整型数组a他有n个元素。
int *p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成。
int (*p)[n]; p为指向含n个元素的一维数组的指针变量。
int f(); f为带回整型函数值的函数。
int *p(); p为带回一个指针的函数,该指针指向整型数据。
int (*p); p为指向函数的指针,该函数返回一个整型值。
int **p; p是一个指针变量,它指向一个指向整型数据的指针变量。
二、指针运算小结
1、指针变量加减一个整数
如:p++ p-- p+i p-i p+=i p-=i 等
实际含义如 p+i 代表地址计算: p+c*i , c为字节数,整型c=2、
实型c=4、字符型c=1。
值得注意的是:P++(或P--)所表示的是指针方向发生了改变而P+i(或P-i)表示的是指针方向不发生改变。
2、指针变量赋值
如:p=&a a为变量,p为指针变量
p=array array为数组名
p=&array
p=max max为函数名
p1=p2 p2为指针变量
注意:不能把一个整数或常数赋给p,如p=1000 同样也不能把p赋给整型变量,如i=p
3、指针变量可以赋空值
如: p=NULL; 实际NULL是整数0。
4、两个指针变量可以相减如两个指针变量指向同一个数组的元素(右图),
则 p2-p1=4-1=3但p1+p2无意义。
5、两个指针变量比较
若两个指针指向同一个数组的元素,则可以比较,
如: p1<p2 p1>p2
三、空类型指针
ANSI新标准增加了一种空类型指针,定义的一般形式为:
void * 变量名
具体使用时要做类型转换,如:
void *p; (int *)p;