类型:转载 责任编辑:asp 日期:2007/03/01
本人刚开始学习指针,对下面这段程序中的*p在这段程序中的运用不太明白,
请各位指教一下,请详细点
#include<stdio.h>
#define n 4
input (int *p)
{int i;
printf("input data:");
for(i=0;i<n;i++,p++)
scanf("%d",&(*p));
}
min_max(int *p)
{int *max,*min,*q;
int i=0;
max=min=q=p;
for(;i<n;i++,q++)
{if(*q>*max)max=q;
else if(*q<*min)min=q;
}
*q=*p;*p=*min;*min=*q;
*q=*(p+n-1);*(p+n-1)=*max ;*max=*q;
}
output (int *p)
{int i;
for(i=0;i<n;i++,p++)
printf("%d",*p);
}
main()
{int a[n];
input(a);
min_max(a);
output(a);
}
推荐阅读
scanf("%d",&(*p));
如果p是个真正的指针,相当于scanf("%d", p);
min_max(int *p)
{
int *max,*min,*q;
int i=0;
max=min=q=p;
for(;i<n;i++,q++)
{
if(*q>*max)
max=q;
else if(*q<*min)
min=q;
}
*q=*p;//内存访问越界!这时q = &a[n]
*p=*min;
*min=*q;
上面三句话是利用a[n]作为临时变量把最小的元素和第一个元素交换,下面三句是把最大的元素和第一个元素交换,由于a只有n个元素,所以有了一个访问越界的错误,应该在这里定义一个临时变量并用它完成交换。
*q=*(p+n-1);
*(p+n-1)=*max ;
*max=*q;
}
to plainsong(伤心的风★短歌)
------------------------------------
你在乱讲!!!
按你程序输出结果是
------------------------------------
input data:100
56
12
2
100
56
12
2
press any key to continue
----------------------------------------------------------------
下面由我来讲吧,plainsong(伤心的风★短歌)及楼主听好了