例1 输入两个数a,b,按照大小顺序输出a和b
解析1(利用指针直接做)
#include<stdio.h>
int main()
{
float *p1,*p2,*p,a,b; //定义指针和变量,p1和p2的类型是float型
printf("please enter two number:")
scantf("%d,%d",&a,&b);
p1=&a; //使指针p1指向a
p2=&b; //使指针p2指向b
if(a<b)
{p=p1;p1=p2;p2=p;}。 引入p使得p1和p2的值互换
printf("Max=%d,min=%dn",*p1,*p2);
return 0;
}
注意:1,&是取值运算符,如上述第六行&a是变量a的地址
2,使指针运算符,如上述倒数第三行的*p1代表p指向的对象
即p=&a,意为指针变量p指向了整形变量a
*p1=1,表示将1赋给p所指变量a
解析2(利用函数求解)
#include<stdio.h>
int main()
{
void swap(float*p1,float*p2); //函数声明
float a,b;
float *x,*y; //定义两个指针变量
printf("please enter a and b:")
scantf("%d,%d",&a,&b);
x=&a;
y=&b;
if(a<b)
swap(x,y);
printf("max=%d,min=%dn",a,b);
return 0;
}
void swap(float *p1,float *p2). //定义函数swap
{float temp; //使p1和*p2的值互换
temp=*p1;
*p1=*p2;
*p2=temp;
}
注意:若出现多个数进行比较,可利用数组来进行解决
例2 有一个整形数组a,有10个元素,要求输出数组中的全部元素
解析1(下表法)
#include<stdio.h>
int main()
{
int a[10];
int i;
printf("please enter 10 numbers:")
if(i=0;i<10;i++)
scanf("%d",&a[i]);
if(i=0;i<10;i++)
printf("%dn",a[i]); //数组元素用数组和下标表示
return 0;
}
解析2(利用数组名计算数组元素地址,找出元素的值)
#include<stdio.h>
int main()
{
int a[10];
int i;
printf("please enter 10 numbers:")
if(i=0;i<10;i++)
scanf("%d",&a[i]);
if(i=0;i<10;i++)
printf("%dn",*(a+i)); //利用数组名和元素序号计算元素地址,从而计算该元素
return 0;
}
解析3(利用指针变量指向数组元素)
#include<stdio.h>
int main()
{
int a[10];
int I,*p;
printf("please enter 10 numbers:")
if(i=0;i<10;i++)
scanf("%d",&a[i]);
if(p=a;p<(a+10);p++)
printf("%dn",*p);
return 0;
}
其中第九行若写成if(i=0;i<10;i++,p++)的时候,结果会发生偏差,但是如果在上面补上一行p=a,即重新定义了一下p的值,那结果便不会发生偏差,原因在于前面的if语句使得p的值等于a[10],而致使结果出错。
注意:(p++)是先输出*p的值,在加1
而(++p)是先加1,再输出*p的值