1. 通过指针变量访问整型变量
#include <stdio.h> int main() { int a,b; int *p1,*p2; scanf("a=%d,b=%d",&a,&b); p1=&a; p2=&b; printf("*p1=%d,*p2=%d",*p1,*p2); return 0; }
2.1 输入两个整数,按先大后小的顺序输出。
要求:用指针方法处理。不交换整型变量的值,而是交换两个指针变量的值。
法一:交换引用内容(自定义函数使用该种方法)
#include <stdio.h> int main() { int a,b,p; int *p1,*p2; scanf("%d%d",&a,&b); p1=&a; p2=&b; if(a<b) { p=*p1; *p1=*p2; *p2=p; } printf("%d %d",*p1,*p2); //printf("%d %d",a,b); 此时引用内容改变,a,b的值改变 return 0; }
法二:那交换地址呢?
#include <stdio.h> int main() { int a,b; int *p1,*p2,*p; scanf("%d%d",&a,&b); p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p; } printf("%d %d",*p1,*p2); //printf("%d %d",a,b); 此时指针地址改变,a,b的值不变 return 0; }
2.2 输入两个整数,按先大后小的顺序输出。
要求:用函数处理,而且用指针类型的数据作函数参数,在函数中通过指针交换两个变量值。
#include <stdio.h> int main() { void swap(int *p1,int *p2); int a,b; scanf("%d%d",&a,&b); if(a<b) { swap(&a,&b);//这里传递地址给被调函数 } printf("%d %d",a,b); return 0; } void swap(int *p1,int *p2)//这里定义指针变量 { int tmp;//这里不可定义野指针,来交换地址 tmp=*p1; *p1=*p2; *p2=tmp; }
3. 输入3个整数,按由大到小的顺序输出。
要求:用函数处理,且用指针做函数参数,实现交换两个数。
#include <stdio.h> int main() { void exchange(int *q1,int *q2,int *q3); int a,b,c; scanf("%d%d%d",&a,&b,&c); if((a<b)||(b<c)||(a<c)) { exchange(&a,&b,&c);//将地址传给被调函数 } printf("%d %d %d",a,b,c); return 0; } void exchange(int *q1,int *q2,int *q3)//定义指针变量 { void swap(int *pt1,int *pt2); if(*q1<*q2) { swap(q1,q2); } if(*q2<*q3) { swap(q2,q3); } if(*q1<*q2)//三个数比较大小,需要两趟;第一趟两次比较,第二趟一次比较 { swap(q1,q2); } } void swap(int *pt1,int *pt2) { int tmp; tmp=*pt1; *pt1=*pt2; *pt2=tmp; }
-END
标签:p2,p1,函数,int,scanf,main,指针 From: https://www.cnblogs.com/peitongshi/p/16768489.html