void main()
{
int* m=(int*)malloc(10);
int i,j,k,N;
printf("请输入排序队列长度:");
scanf("%d",&N);
int a[N];
*m=&a[0];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("输出结果为:");
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(a[j]<a[k])
k=j;
if(i!=k)
{
*m=&a[i];
a[i]=a[k];
a[k]=*m;
}
}
for(i=0;i<N-1;i++)
printf("%d ",a[i]);
printf("%d",a[N]);
}
代码如上,每次测试的时候最后一个字符都会变成32763
void main()
{
int *m; //int* m=(int*)malloc(10); 10不合适,分配了10个字节
int i, j, k, N;
printf("请输入排序队列长度:");
scanf("%d", &N);
//int a[N]; 动态数组不能这么定义
//*m=&a[0]; *m表示指针m的内容,
m = (int *)malloc(N*sizeof(int));
for (i = 0; i < N; i++)
scanf("%d", m+i); //scanf("%d", &a[i]);
printf("输出结果为:");
int tmp;
for (i = 0; i < N - 1; i++)
{
k = i;
for (j = i + 1; j < N; j++)
if (m[j] < m[k]) //if (a[j] < a[k])
k = j;
if (i != k)
{
tmp=m[i]; //*m = &a[i];
m[i]=m[k]; //a[i] = a[k];
m[k]=tmp; //a[k] = *m;
}
}
for (i = 0; i < N; i++)
printf("%d ", m[i]);
//printf("%d", m[N]);
}