指针的问题,新手求助!
#include <stdio.h>
#define N 10
void comp(int * arr, int n);
int main(void)
{
int i,j,tmp;
int a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
/*for(i=0;i<N;i++)
for(j=0;j<N-i;j++)
if(a[j]>a[j+1])
{
tmp = a[j];
a[j]= a[j+1];
a[j+1]= tmp;
}
*/
int * p ;
p = a;
comp(p,N);
for(i=0;i<N;i++)
printf("%d\n",a[i]);
printf("\n");
return 0;
}
void comp(int * arr, int n)
{
int i,j,tmp;
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j]= arr[j+1];
arr[j+1]= tmp;
}
return ;
}
我把冒泡法单独拿出来用就出问题了,
如果comp(a,N);的话就没有问题,但是定义了一个指针,为什么就出现错误呢?
运行结果是这样的
输入:1 3 5 7 9 2 4 6 8 0
输出:
-1079551224
0
1
2
3
4
5
6
7
8
[解决办法]
#include <stdio.h>
#define N 10
void comp(int * arr, int n);
int main(void)
{
int i;
int a[N] = {1, 3, 5, 7, 9, 2, 4, 6, 8, 0};
int * p ;
//for(i=0;i<N;i++)
//scanf("%d",&a[i]);
/* for(i=0;i<N;i++)
for(j=0;j<N-i;j++)
if(a[j]>a[j+1])
{
tmp = a[j];
a[j]= a[j+1];
a[j+1]= tmp;
}
*/
p = a;
comp(p,N);
for(i=0;i<N;i++)
printf("%d\n",a[i]);
printf("\n");
return 0;
}
void comp(int * arr, int n)
{
int i,j,tmp;
for(i=0;i<N;i++)
for(j=0;j<N-i-1;j++)// 注意这里,是j < N-i-1
if(arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j]= arr[j+1];
arr[j+1]= tmp;
}
}