10个整数存放于数组a中,编写一个程序找出并输出数组中的最大值及其下标

#include<stdio.h>
main(){ int x[10],*p1,*p2,i;
for(i=0;i<10;i++)
scanf("%d", &x[i] );
for(p1=x,p2=x;p1-x<10;p1++) // ? for循环的p1和p2的指针是什么意思?加上个注释解释下
if(*p1>*p2) // ?
p2= p1 ; // ?
printf("max=%d,index=%d",*p2, p2-x );
}

遍历数组的时候可以用数组下标,也可以用这种方法。
下面解释一下这种方法--
这里的p1,p2是指针,
p1=x含义是p1指向x,这时*p的含义是p指针值得内容,和x[0]含义相同
p2=x同理
p1-x是指针减法,是两个指针相差的字节数除以一个单位的字节数。其中一个变量的字节数可以用sizeof计算,例如一个int类型变量占4字节,那么sizeof(int)=4
p1++是指针加法,是向后移动1*sizeof(int)个字节,若初始时候p1=x(*p1和x[0]等价),那么p1++后,*p1就和x[1]等价。
*p1>*p2是两个指针指向内容的比较,和整数比较一样
p2= p1 是指针赋值

整个程序含义为求10个元素中是最大值和最大值所在的位置追问

三个问号后面,写个简单的注解嘛!

还有,当输入0 1 2 3 4 5 6 7 8 9时,怎么就找到9是最大的?

追答

我觉的我已经说的足够详细了.
如过询问具体例子,wo希望你自己动手进行单步调试,来锻炼自己的能力。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答