y7.2指针变量 History 例 main( int i=10 指针变量必须先赋值,再使用 int *p; *p-i; 2000 整型变量i printf"%d",*p), 2001 10 2002 危险飞 2003 2004 ←一指针变量p 例 main() 2005 { int i=10,k, 随机 2006 int *p; p=&k; *p-i; printf"%d",*p)
7.2 指针变量 指针变量必须先赋值,再使用 例 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 随机
y7.2指针变量 ART History 零指针与空类型指针 零指针:(空指针) p指向地址为0的单元, 系统保证该单元不作它用 ·定义指针变量值为零 表示指针变量值没有意义 ●表示:int*p=O; #define NULL 0 int *p=NULL; 例 charn啡pip void*p2: ·p=NU儿L与未对P赋值不同 PI-(PULL) ·用途: p2=(void*)pl; ◆避免指针变量的非法引用 ◆在程序中常作为状态比较 void*类型指针 表示不指定p是指向哪一种 ●表示:void*p; 类型数据的指针变量 ·使用时要进行强制类型转换
7.2 指针变量 ➢ 零指针与空类型指针 ❖零指针:(空指针) ⚫ 定义:指针变量值为零 ⚫ 表示: 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是指向哪一种 类型数据的指针变量
y7.2指针变量 History 例指针的概念 main() 运行结果: . int a; a:10 f86 整型变量a int *pa=&a; *pa:10 &a:f86(hex) f87 10 a=10; pa:f86(hex) f88 指针变量pa printf("a:%d n",a); &pa:f88(hex) f89 86 printf("*pa:%d n",*pa); a printf("&a:%x(hex)n",&a); printf("pa:%x(hex)\n",pa); f8c printf("&pa:%x(hex)n",&pa);
7.2 指针变量 例 指针的概念 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
7.2指针变量 History 例输入两个数,并使其从大到小输出 mainO .: { int *pl,*p2,*p,a,b; 2000 指针变量pl scanf("%d,%d",&a&b): 2008 2002 指针变量p2 2006 pl-&a;p2=&b; 2004 指针变量p if(a<b) 2006 2006 整型变量a p=pl;pl=p2;p2-p;) 5 2008 整型变量b printf("a-%d,b-%d n",a,b); 9 printf("max-%d,min-%d\n",*pl,*p2); 运行结果:a=5,b-9 max=9.min=5
7.2 指针变量 例 输入两个数,并使其从大到小输出 main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p;} printf("a=%d,b=%d \n",a,b); printf("max=%d,min=%d \n",*p1,*p2); } 运行结果:a=5,b=9 max=9,min=5 . . 指针变量p1 指针变量 p 2000 2008 2002 2004 2006 指针变量p2 整型变量 b 整型变量 a 5 2006 9 2008 2006 2008 2006
y7.2指针变量 History >指针变量作为函数参数一一地址传递 特点:共享内存,“双向”传递 例将数从大到小输出 (main) 2000 变量a swap(int x,int y) 5 int temp; 2002 变量b temp-x, 2004 9 COPYA (swap) x-y, 2006 变量x y-temp; 2008 9 变量y 200A 5 ←一变量temp main() 5 int a,b; scanf("%od,%d",&a &b); if(a<b)swap(a,b); printf("\n%d,%d n",a,b);
7.2 指针变量 ➢指针变量作为函数参数——地址传递 特点:共享内存, “双向”传递 swap(int x,int y) { int temp; temp=x; x=y; y=temp; } main() { int a,b; scanf("%d,%d",&a,&b); if(a<b) swap(a,b); printf("\n%d,%d\n",a,b); } 例 将数从大到小输出 . . 2000 2008 200A 2002 2004 2006 5 变量a 变量b (main) 9 变量temp 变量y 变量x (swap) 5 5 95 9 COPY