有一个程序,要求输入10个实数存入一维数组,寻找其中的其中的最小数和第一个数交换后输出。要求用指针变量处理数字元素。
程序清单如下:
void main()
{ float f[10], *p,x,*p_min;
for(p=f;p<f+10;p++)
scabf("%f",p);
p_min=&f[0];
for(p=f+1;p<f+10;p++)
if(*p<*p_min)
p_min=p;
x=*p_min,*p_min=*f,*f=x;
for(p=f;p<f+10;p++)
printf("%8.2f",*p);
}
我的问题是第4行的指针变量p可以不加*,那第11行的指针变量p为什么要加*号,可以不加吗?为什么?
scanf()与printf()实际是两个库函数,它们在头文件里已经被写好了!scanf()需要两参数,一个为字符型的表示输入格式,另一个为指针或地址,它应该指向你所要存储变量的地址!而printf()需要一个字符型参数,表输出的数据和格式,后面要跟上输出列表,后面的列表应该为具体的变量值,而不是指针或地址!*P值指的是p所指的具体变量!而p是指指针,也就是p所指的变量的地址!所以他们不能乱用,现在应该明白了吧!就像一个max(int a,int b)函数 他需要两个int 参数如果你给她别的数据,那肯定就是错误的了!
第四行的指针变量P是不可以输入的,是由系统分配的。而在第11行的指针就是P在和数组的指针比较,但我认为这样写不好,你可以定int变量来控制循环的次数,这样就不用指针变量了。