指针变量必须先赋值,再使用 例main() int 1=10 nt 2000 整型变量i printf(%od”,*p) 2001 10 2002 2003 危险! 2004 指针变量p 2005 随枳 例ma 2006 nt p p=&k printf("%d”,*p)
例 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 随机 指针变量必须先赋值,再使用
923零指针与空类型指针 零指针:(空指针) D指向地址为0的单元, 定义:指针变量值为零 系统保证该单元不作它用 表示:int*p=0 表示指针变量值没有意义 #define nULL 0 int *p=NULL 例 例char*p1 void *p2 p-NUIL与未对p赋值不同 pl=(char *)p2 用途: p2=(void pI 避免指针变量的非法引月 在程序中常作为状态比较 void*类型指针 表示不指定卩是指向哪一种 表示: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是指向哪一种 类型数据的指针变量 9.2.3 零指针与空类型指针
例输入两个数,并使其从大到小输出 maint i int* pl, p2, p, a, b scanf("%d, %d", &a, &b) 指针变量pl 2008 pI=&a; p2=&b; 2002 指针变量p2 2006 if(a<b) 指针变量p 2006 i p=pI; pl=p2; p2=p; 2 整型变量a printf("a=d, b=%dn", a, b) 200 一整型变量b printf("max=%d, min=%odn", pl, p2) 运行结果:a=5,b=9 max min=5
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 例 输入两个数,并使其从大到小输出
924指针变量作为函数参数——地址传递 特点:共享内存,“双向”传递 例将数从大到小输出 swap(int x, int y) (main) 2000 变量a int temp 2002 5 变量b temp=X 004 COPY/2006 (swap) 一变量x y=temp 2008 变量y 200A 变量temp mal 955 i int a, b scanf("%d,%d", &a, &b) if(a<b) swap(a, b) printf("n%d, %dn", a, b)
特点:共享内存, “双向”传递 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 9.2.4指针变量作为函数参数——地址传递
特点:共享内存,双向”传递 例将数从大到小输出 (main) swap(int x, int y) 2000 变量a int temp 2002 变量b temp=X 2004 2006 temp 值传递 2008 200 maino Int a, b, scanf("%d,%d", &a, &b if(a<b) swap(a, b) printf("n%d, %odin", a, b) 运行结果:5,9
特点:共享内存, “双向”传递 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 运行结果:5, 9