二、指针变量的引用 如定义:int*p,i 指针变量p的值是一个地址值,引用指针变量p所指向的 变量的值,表示为“*p”。 表达式”p=&的作用是:将的地址送给p,使p指向i。 表达式“*p=”的作用是:将的值送给p所指向的变量。 指针变量与其所指向的变量之间的关系 p 变量 *p 2000 3 &i P i=3 *p=3
3 变量i 2000 p *p i *p &i p i=3; *p=3 3 变量i 2000 p *p i *p &i p i=3; *p=3 指针变量与其所指向的变量之间的关系 如定义:int *p,i; 指针变量p的值是一个地址值,引用指针变量p所指向的 变量的值,表示为“*p”。 表达式“p=&i”的作用是:将i的地址送给p,使p指向i。 表达式“*p=i”的作用是:将i的值送给p所指向的变量。 二、指针变量的引用
三、指针变量的初始化 一般形式:「存储类型]数据类型*指针名=初始地址值; 例 int i; 赋给指针变量, int *p=&i; 变量必须已定义过 类型应一致 例 int i; 例 intint p& intintq-p, 用已初始化指针变量作初值 例 main() { int i; static int *p=&i; 。 不能用auto变量的地址 () 去初始化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, *p=i, 2000 整型变量i printfod",*p); 2001 10 2002 危险人 2003 2004 ←一指针变量p 例 main( 2005 { int i=10,k; 2006 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 0 int *p=NULL: 例 例 cH帮; void*p2. ●p=NULL与未对p赋值不同 p4R2士) ●用途: p2-(void *)pl; ◆避免指针变量的非法引用 ◆在程序中常作为状态比较 必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是指向哪一种 类型数据的指针变量
例指针的概念 运行结果: main() a:10 *pa:10 f86 整型变量a int a; &a:f86(hex) f87 10 int *pa=&a; pa:f86(hex) f88 ←指针变量pa a=10; &pa:f88(hex) f86 printf("a:%dn",a); f89 printf("*pa:%d n",*pa); f8a printf("&a:%x(hex)n",&a); f8b printf("pa:%x(hex)n",pa); f8c printf("&pa:%x(hex)n",&pa);
例 指针的概念 main() { int a; int *pa=&a; a=10; printf("a:%d\n",a); printf("*pa:%d\n",*pa); printf("&a:%x(hex) \n",&a); printf("pa:%x(hex) \n",pa); printf("&pa:%x(hex) \n",&pa); } 运行结果: a:10 *pa:10 &a:f86(hex) pa:f86(hex) &pa:f88(hex) . . f86 f8a f8c f8b 整型变量 a 10 指针变量pa f87 f88 f89 f86