例指针的概念 Ch9 0.c 运行结果: .·.· 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) printf("a:%dn",a); f89 f86 printf"*pa:%dn",pa); f8a printf("&a:%x(hex)\n",&a); f8b printf("pa:%x(hex)n",pa); f8c printf("&pa:%x(hex)n",&pa); D
例 指针的概念 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
例输入两个数,并使其从大到小输出 Ch9 2 c mainO) int *pl,*p2,*p,a,b; scanf("%d,%d",&a&b); 2000 指针变量p1 2008 pl=&a;p2=&b; 2002 2006 ←一指针变量p2 if(a<b) 2004 一 指针变量p 2006 p=pl;pl=p2;p2=p;) 2006 4一 整型变量a printf("a-%d,b-%d n",a,b); 2008 5 整型变量b printf("max-%d,min-%d n",*pl,*p2); 9 运行结果:a=5,b=9 max=9,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
★指针变量作为函数参数一 地址传递 特点:共享内存,“双向”传递 例将数从大到小输出 (main) swap(int x,int y) 2000 变量a int temp; 2002 5 ←一变量b temp-x; 2004 9 x-y, COPY (swap) 2006 ←一变量x y-temp; 2008 9 一变量y 200A 5 main() ←变量temp 5 int a,b; scanf("%d,%d",&a&b); if(a<b)swap(a,b); printf("n%d,%d n",a,b); D
指针变量作为函数参数——地址传递 特点:共享内存, “双向”传递 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
★指针变量作为函数参数 地址传递 特点:共享内存,“双向”传递 例将数从大到小输出 (main) swap(intx,inty) 2000 变量a int temp; 2002 5 变量b temp-x; 9 2004 x-y; 2006 y-temp; 八 值传递☒ 2008 200A mainO int a,b; scanf("%d,%d",&a &b); if(a<b)swap(a,b); printf("n%d,%d n",a,b); 运行结果:5,9 0
指针变量作为函数参数——地址传递 特点:共享内存, “双向”传递 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
到 例将数从大到小输出 Ch9_3.c swap(int *pl,int *p2) int p; (man)】 2000 整型变量a p=*pl; 9 *pl=*p2; 2002 整型变量b 5 *p2=p; 2004 指针pointer1 2000 } 2006 指针pointer_2 main() 2008 2002 int a,b; COPY 200A (swap) 2000 ←一指针pl int *pointer_1,*pointer_2; 200C ←一指针p2 scanf("%d,%d",&a,&b); 2002 200E 整型p pointer_1=&a;pointer_2-&b; 5 2010 if(a<b)swap(pointer_1,pointer_2); printf("\n%d,%d n",a,b);
swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } main() { int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); } . 2000 2008 200A 2002 2004 2006 200C 200E 2010 . 5 9 整型变量a 整型变量b (main) 指针pointer_1 指针pointer_2 2000 2002 (swap) 指针p1 指针p2 整型p 5 9 2000 2002 COPY 5 例 将数从大到小输出