文档介绍:第10章指针类型
指针与指针变量
指针与数组
指针与字符串
指针与结构体
指针与链表
指针与函数
指针作基类型
程序设计举例
指针与指针变量
指针变量的定义
1. 定义方法
形式:
类型标识符*变量标识符;
定义存放指定类型数据地址的指针变量。
例如:
(1) int *p1, *p2, *p3;
定义指向整型数据的指针变量p1、 p2、 p3。
(2) float *q1, *q2, *q3;
定义指向实型数据的指针变量q1、 q2、 q3。
(3) char * r1, *r2, *r3;
定义指向字符型数据的指针变量r1、 r2、 r3。
(4) struct date
{int year;
int month;
int day;
} *t1, *t2, *t3;
定义指向struct date类型数据的指针变量t1、 t2、 t3。
说明:
(1) 指针变量可与普通变量混合定义, 指针变量的定义与普通变量的定义用变量名前加“*”区分。例如:
int i, *p; /*定义整型变量i, 指针变量p*/
(2) 空指针“NULL”是一特殊的指针数据,表示空地址,相当于整型数据中的0,字符数据中的空格。
(3) 指针变量只能用于存放指定类型数据的地址。如以上定义的一些指针变量,p1、p2、p3只能存放整型数据的地址,q1、 q2、 q3只能存放实型数据的地址,r1、r2、r3只能存放字符型数据的地址,t1、t2、 t3只能存放struct date型数据的地址。
(4) 指针变量不能直接赋以具体地址值,不能从键盘输入值。指针变量通过间接赋以相关数据的地址,或调用存储空间分配函数得到值。例如:
int i, j, k;
int*p1=&i,* p2=&j,* p3=&k;/* p1得到i的地址,p2得到j的地址, p3得到k的地址*/
(5) 指针类型隐含在指针变量的定义中。例如,在上面定义指针变量p1、p2、p3时,实际上在背后隐含定义了一指向整型数据的指针类型,从形式上可以将int*看成是指向整型数据的指针类型。
与数组定义一样,通过typedef可以将指针类型与指针变量分离。例如,上面定义的指针变量p1、 p2、 p3, 可以改用如下形式:
typedef int *INTPOINT;
INTPOINT p1, p2, p3;
(6) 指针变量本身占有2字节的存储空间。
(7)“void *”指针类型定义的指针变量, 不指向哪一种特定类型的数据,在实际使用时通过强制类型转换成指向特定类型的数据。
2. 指针变量所指向的变量特定类型的数据
例如,对指针变量p1、p2、p3,假定已有值,*p1、*p2、*p3代表指针变量p1、p2、p3所指向的数据,也就是p1、p2、p3的值对应的存储单元里存放的数据, 称为指针变量所指向的变量,简称指针指向变量。
如果指针变量p1、 p2、 p3分别存放整型变量i、 j、 k的地址, 则p1指向i, p2指向j,p3指向k。图10 - 1来直观反应指针变量与指针指向变量的关系。