例 k=i; -直接访问 k=*i pointer; 间接访问 2000 整型变量i 2001 10 2002 ←一整型变量k 2003 10 2004 ←一变量i pointer 2005 2000 指针变量 2006
指针变量 . . 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 整型变量k 例 k=i; -直接访问 k=*i_pointer; -间接访问 10 例 k=i; k=*i_pointer;
§7.2指针变量 指针变量与其所指向的变量之间的关系 1 pointer 变量i i*i pointer 2000 3 &ii pointer *i pointer i=3;*i pointer-3 ★指针变量的定义 冬一般形式: 「存储类型] 数据类型 指针名; int *pl*p2 feat 特示定义指针变量 指计变量sta撞d 型 标识符 c是*nahe注算符 注意: l、int*pl,*p2,与int*pl,p2; 2、指针变量名是p1,p2,不是*pl,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值
§7.2 指针变量 指针变量与其所指向的变量之间的关系 指针变量的定义 ❖一般形式: [存储类型] 数据类型 *指针名; 3 变量i 2000 i_pointer *i_pointer i *i_pointer &i i_pointer i=3; *i_pointer=3 3 变量i 2000 i_pointer *i_pointer i *i_pointer &i i_pointer i=3; *i_pointer=3 指针变量本身的存储类型 指针的目标变量的数据类型合法标识符 表示定义指针变量 不是‘*’运算符 例 int *p1,*p2; float *q ; static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值
★指针变量的初始化 一般形式:[存储类型]数据类型*指针名=初始地址值; 例 int i; 赋给指针变量 int *p=&i; 变量必须已说明过 类型应一致 例 int i; 例 int *t&p-&i; int i;int *q=p5 用已初始化指针变量作初值 例 main( { int i; static int *p=&i; 不能用auto变量的地址 (X) 去初始化static型指针
指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值; 赋给指针变量, 不是赋给目标变量 例 int i; int *p=&i; 变量必须已说明过 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值 例 main( ) { int i; static int *p=&i; . } () 不能用auto变量的地址 去初始化static型指针
指针变量必须先赋值,再使用 例 main( int i=10; int *p; 2000 整型变量i *p=i, 2001 10 printf"d",*p); 2002 2003 2004 ←一指针变量p 2005 随机 例 main( 2006 { int i=10,k; int *p, p=&k, *p=i, printfdp);
例 main( ) { int i=10; int *p; *p=i; printf(“%d”,*p); } 危险! 例 main( ) { int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); } 指针变量必须先赋值,再使用. . 2000 2004 2006 2005 整型变量i 10 指针变量p 2001 2002 2003 随机
★零指针与空类型指针 零指针:(空指针) p指向地址为0的单元, ●定义:指针变量值为零 系统保证该单元不作它用 ●表示:int*p=0; 表示指针变量值没有意义 #define NULL O int *p=NULL: 例 例 cH帮; void*p2. ●p=NULL与未对p赋值不同 PWEL) ●用途: p2-(void *)p1; ◆避免指针变量的非法引用 ◆在程序中常作为状态比较 冬Void*类型指针 表示不指定p是指向哪一种 ●表示:void*p; 类型数据的指针变量 ●使用时要进行强制类型转换
零指针与空类型指针 ❖零指针:(空指针) ⚫定义:指针变量值为零 ⚫表示:int * p=0; p指向地址为0的单元, 系统保证该单元不作它用 表示指针变量值没有意义 #define NULL 0 int *p=NULL: ⚫p=NULL与未对p赋值不同 ⚫用途: ◆避免指针变量的非法引用 ◆在程序中常作为状态比较 例 int *p; . while(p!=NULL) { . } ❖void *类型指针 ⚫表示: void *p; ⚫使用时要进行强制类型转换 例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1; 表示不指定p是指向哪一种 类型数据的指针变量