已经调试运行过了,两种方法希望对你有用哦!
#includestdio.h
voidmain()
{
inta[3];
int*p=a;
inti,j,temp;
printf(\"请输入三个数:\");
for(i=0;i=2;i)
{
scanf(\"%d\",
}
for(i=0;i2;i)
for(j=0;j2-i;j)
{
if(*(pj)*(pj1))
{
temp=*(pj);
*(pj)=*(pj1);
*(pj1)=temp;
}
}
for(i=0;i3;i)
printf(\"%d\\n\",*p);
}
对于你的问题,现做如下解释;你的循环无论怎么做都只会比较第一个数和第二个数的值,因为p始终等于a,即本想让p随着循环变化,后来无法实现;自然比较不出来咯!
如果只是单纯在if的语句中添加p的话,最后p的最终指向的地址将是不确定的,所以只有让p不变化,让(pj)的值变化,即如上面代码所示,这样就解决了;
另外对于你那个为什么*p不行,因为p始终指向a,所以不行;*p和a都可以哦!
下面提供另外一种定义方法:会很好的解决指针指向问题的!
#includestdio.h
voidmain()
{
ints[3];
int*p[3];
int*t;
inti,j;
for(i=0;i3;i)
{
printf(\"请输入第%d个数:\",i1);
scanf(\"%d\",
p=
}
for(i=0;i3;i)
{
for(j=0;j3-i;j)
{
if(*p[j]*p[j1])
{
t=p[j];
p[j]=p[j1];
p[j1]=t;
}
}
}
printf(\"排序后的从小到大三个数为:\\n\");
for(i=0;i3;i){
printf(\"%d\",*p);
}
}
希望会对你有所帮助,还有就是敲代码注意格式哦,呵呵
|