用指针使用冒泡排序
#include <stdio.h>
#define M 10
void main()
{
int a[M];
int *p,*p1;
int i,j;
p1=a;
for(i=0;i <10;i++)
{
scanf( "%d ",a[i]);
}
for(i=0;i <10;i++)
{
for(j=0;j <M-i-1;j++)
{
if(a[j]> a[j+1])
{
*p=*(p1+j);
*(p1+j)=*(p1+j+1);
*(p1+j+1)=*p;
}
}
}
for(i=0;i <10;i++,p1++)
{
printf( "%d ",*p1);
}
printf( "\n ");
}
想法是换掉[j]> a[j+1]的地址,
输出*P1
不知道那些地方不对,本人是菜地,望请高人指点一二
[解决办法]
#include <stdio.h>
#define M 10
void main()
{
int a[M];
//int *p,*p1;
int p, *p1;
int i,j;
//p = NULL; p没有初始化
p1=a;
for(i=0;i <10;i++)
{
//scanf( "%d ", &a[i]);
scanf( "%d ", &a[i]); // 输入问题
}
for(i=0;i <10;i++)
{
for(j=i;j <10;j++)
{
if(a[i]> a[j])
{
p=*(p1+i);
*(p1+i)=*(p1+j);
*(p1+j)=p;
}
}
}
for(i=0;i <10;i++)
{
printf( "%d ", p1[i]);
}
printf( "\n ");
}
[解决办法]
楼上的说的有道理,指针p应该初始化一下,虽然不初始化也可以得到结果,但要养成良好的编程习惯,使用指针的时候要小心,不要变成野指针!