★指针变量作为函数参数地址传递 特点:共享内存“双向”传递 例:编写一个函数,实现两个数的交换 swap(int x, int y) an 2000 59 ←变量a i int t; 2002 ←变量b X;x-Y; y=t 2004 COPY2006 (swap ←变量x 值传递 2008 ←变量y main 200A i int a, b; 955 ←变量t scanf("%od%d", &a, &b); swap(a, b) printf(" in%d, %od\n", a, b) 运行结果:5,9
指针变量作为函数参数——地址传递 特点:共享内存, “双向”传递 swap(int x,int y) { int t; t=x; x=y; y=t; } main() { int a,b; scanf("%d%d",&a,&b); swap(a,b); printf("\n%d,%d\n",a,b); } 例:编写一个函数,实现两个数的交换 …... …... 2000 2008 200A 2002 2004 2006 5 变量a 变量b (main) 9 变量t 变量y 变量x (swap) 5 5 95 9 COPY 值传递 运行结果:5, 9
例:编写一个函数,实现两个数的交换 swap( int *pl,int“p2) int main 2000 9 整型变量a p1; 2002 pl=*p2 整型变量 5 *p2=p 2004 指针p1 2000 2006 地址传递 2002 卜指针p2 main 2008 i int a, b; COPY 200A (swap) ←一指针pl 2000 int*pl, p2 200C ←一指针p2 scanf(%od%d", &a, &b); 2002 200E ←一整型p l=&a;p2=&b 5 2010 swap(pl, p2); printf("n%d, %dn", a, b) 运行结果:9,5
swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } main() { int a,b; int *p1,*p2; scanf("%d%d",&a,&b); p1=&a; p2=&b; swap(p1,p2); printf("\n%d,%d\n",a,b); } …... 2000 2008 200A 2002 2004 2006 200C 200E 2010 ... 5 9 整型变量a 整型变量 b (main) 指针p1 指针p2 2000 2002 (swap) 指针p1 指针p2 整型p 5 9 2000 2002 COPY 5 例:编写一个函数,实现两个数的交换 运行结果:9,5 地址传递
例;编写一个函数,实现两个数的交换 swap(int☆l,int*p2) (main) i int x,"*p=&x 2000 整型变量a p-p 2002 整型变量b pl=*p2 9 2004 指针pl 2 p p, 2000 2006 指针p2 编译警告! 2002 2008 main(O结果不对!COHY 200A (swap) i int a, b; ←一指针pl 2000 int*pl, * p2 200 ←一指针p2 2002 scanf(%od%od",&a, &b) 200E ←一指针p d* 2 l=&a;p2=&b; 2010 设2000 swap(pl, p2); printf( in%od, %dn", a, b) 指针变量在使用前 必须赋值 运行结果:9,9
swap(int *p1, int *p2) { int *p; *p=*p1; *p1=*p2; *p2=*p; } main() { int a,b; int *p1,*p2; scanf("%d%d",&a,&b); p1=&a; p2=&b; swap(p1,p2); printf("\n%d,%d\n",a,b); } 运行结果:9,9 编译警告! 结果不对! int x, *p=&x; 例:编写一个函数,实现两个数的交换 …... 2000 2008 200A 2002 2004 2006 200C 200E 2010 ... 5 9 整型变量a 整型变量b (main) 指针p1 指针p2 2000 2002 9 9 2000 2002 COPY (swap) 指针p1 指针p2 指针p **** 假设2000 指针变量在使用前 必须赋值!
例:编写一个函数,实现两个数的交换 swap(int x, int y) (main) i int t 2000 整型a t-X;xy; y-t; 2002 5 整型b 9 2004 maino 2000 2006 2 i int a, b /2008 2002 int*pl, "p2; COPY 200A (swap) scanf(%d%d", &a, &b); 整型x 200C 整型b pl=&a; p2=&b; swap ( pl, p2); 200E 整型t printf("in%d, %dn", a, b); 2010 运行结果:5,9
swap(int x,int y) { int t; t=x; x=y; y=t; } main() { int a,b; int *p1,*p2; scanf("%d%d",&a,&b); p1=&a; p2=&b; swap(*p1,*p2); printf("\n%d,%d\n",a,b); } 运行结果:5,9 例:编写一个函数,实现两个数的交换 …... 2000 2008 200A 2002 2004 2006 200C 200E 2010 ... 5 9 整型a 整型b (main) p1 p2 2000 2002 9 COPY (swap) 整型x 整型b 整型t 5 5 95
§8.3指钋与数组 1、数组是连续存放的若干个元素的集合 2、数组名就是指向此数组第1个元素的指针(首地址) 如:inta[10],*p;则p=a等价于p=&a[0]; 3、某一元素的地址:p=&alil 用指针引用该元素:p H array p array 例 int array10; array 2 int“p; array 3 p&array o; p=array; array 整型指针p&ara0
§8.3 指针与数组 例 int array[10]; int *p; p=&array[0]; // p=array; array[0] array[1] array[2] array[3] array[9] ... 整型指针p &array[0] p