制作:方斌 2、区分:*运算符在不同场合的作用,编译器能够根据上下文环境判 别*的作用。 int a, b, Ci int*p;(*表示定义指针) p=&a; *p=100;(*表示指针运算符) C=a*b;(*表示乘法运算符) 3、区分*运算符的以下用法: int a j int*p≡&a;/*定义指针变量时指定初值,是为p指定初值*/ *p=100;/*给指针p所指向的变量赋值,这里是给变量a赋值*/ 关于*和&运算符的其它细节,自学教材
制 作:方 斌 2、区分:*运算符在不同场合的作用,编译器能够根据上下文环境判 别*的作用。 int a,b,c; int * p; (*表示定义指针) p = &a; *p = 100; (*表示指针运算符) c = a * b; (*表示乘法运算符) 3、区分*运算符的以下用法: int a ; int *p = &a; /*定义指针变量时指定初值,是为p指定初值*/ *p = 100; /*给指针p所指向的变量赋值,这里是给变量a赋值*/ 关于*和&运算符的其它细节,自学教材
制作:方斌 [例10.2]输入a和b两个整数,按先大后小的顺序输出a和b。 void main(void) { int *pl, * p2 *p, a, b scanf ("%/od, %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\",*pl r *p2) }
制 作:方 斌 [例10.2] 输入a和b两个整数,按先大后小的顺序输出a和b。 void main(void) { 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); }
制作:方斌 程序分析: if(a<b){p=p1;p1=p2;p2=p;} p1=&a;p2=&b; 如果a<b则交换p1和p2的值。 p pl a a 5 p b 5 &b 9 p2 b p1指向变量a,p2指向变量b d 9 即p1的值是变量a的地址,p2 的值是变量b的地址 该例不交换变量a、b的值,而是交换指针 p1、p2的值,即交换地址。 printf ("max=%d, min=%d\n",*pl, *p2) /*输出p1和p2所指向变量的值*/ 运行结果:假设输入38 则输出为:a=3,b=8 max=8, min=3
制 作:方 斌 程序分析: p1 = &a; p2 = &b; if (a<b) {p=p1; p1=p2; p2=p;} 如果a<b则交换p1和p2的值。 该例不交换变量a、b的值,而是交换指针 p1、p2的值,即交换地址。 p1指向变量a,p2指向变量b 即p1的值是变量a的地址,p2 的值是变量b的地址 printf("max=%d,min=%d\n", *p1, *p2); /*输出p1和p2所指向变量的值*/ 运行结果:假设输入3 8 则输出为:a=3,b= 8 max=8,min=3
制作:万斌 三、指针变量作为函数的参数 [例10.3]题目要求同[例10.2],输入a和b两个整数,按先大后小的顺序输出a和b void swap(int*p1,int*p2)/*交换指针p1、p2所指向的变量的值*/ t int p; P=P *p1=*p2; *p2=p; } void main (void) { int a, b: int *pointer_1,*pointer_2; 运行结果: 假设输入59 scanf(%/d%d", &a, &b) 则输出为:9,5 pointer_1 &a; pointer_ 2=&b: if(a<b swap(pointer_ 1, pointer_2) /*另一种调用sWap()的形式是:f(a<b)swap(8a,&b);*/ printf("\n%/od, %/od\n",a, b) }
制 作:方 斌 三、指针变量作为函数的参数 [例10.3] 题目要求同[例10.2],输入a和b两个整数,按先大后小的顺序输出a和b。 void swap(int *p1, int *p2) /*交换指针p1、p2所指向的变量的值*/ { int p; p = *p1; *p1 = *p2; *p2 = p; } void main(void) { 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); /*另一种调用swap()的形式是:if(a<b) swap(&a,&b); */ printf("\n%d,%d\n",a,b); } 运行结果: 假设输入 5 9 则输出为:9,5
制作:方斌 1、程序执行过程的说明 执行 pointer 1 a pointer 1=&a &a pointer2=&b;后 pointer 2 5b9 pointer1和 pointer_2分别 b 指向a和b p 1 a 调用函数 pointer swap(pointer 1, pointer 2 ) a 生成两个形参pl和p2。实 2 p 参 pointer a的值传送给形 b 参pl,因此pl也指向a pointer 同理,p2指向b &b
制 作:方 斌 1、程序执行过程的说明 : 执行 pointer_1 = &a; pointer_2 = &b; 后 pointer_1 和pointer_2分别 指向 a 和 b 。 调用函数 swap(pointer_1,pointer_2) , 生成两个形参p1 和p2。实 参pointer_a的值传送给形 参p1,因此p1也指向a。 同理,p2指向 b