int as(int a[],int n)
{
int *b[n],*s,i,j,k=n;
while(k>=0) {b[k]=&a[i];k--;}
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(*b[j]>*b[j+1])
{ s=b[j];b[j]=b[j+1];b[j+1]=s;}
return b;
}
int as(int a[],int n)
{
int *b[n],*s,i,j,k=n;
while(k>=0) {b[k]=&a[i];k--;}
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(*b[j]>*b[j+1])
{ s=b[j];b[j]=b[j+1];b[j+1]=s;}
return b;
}
你的意图是传递一个数组, 然后再将用一个指针数组来存入该数组每个元素的地址, 通过指针交换来交换数组元素, 然后返回这个指针数组, 如果是这样的话, 就指出以下错误, 1: while(k >= 0) { b[k] = &a[i]; k--}其中K初始为n你不知道数组越界了吗? 其二, 你里面的i初始化了吗? i 里面是垃圾值, 改为 k = n - 1; i = n - 1;
while(k >= 0) b[k--] = &a[--i]; 2: 下面是冒泡排序不? 有误,
for(i = 0; i < n; ++i)
for(j = 0; j < n - i; ++j)
if(*b[j] > *b[j+ 1]) 也不检查一下, i = 0; j < n; if(*b[j] > *b[j + 1]) .... j + 1 越界了,
应该如下写
for(i = 0; i < n; ++i)
for(j = 0; j < n - i - 1; ++j)
if(....) .............
or
for(i = 1; i < n; ++i)
for(j = 0; j < n - i;)
or
for(i = n; i > 0; ++i)
for(j = 0; j < n - 1 ; ++j)
;
for(i = n; i >0; ++i)
for(j = 1; j < n; ++j)
if(*b[j - 1] > *b[j])
总之不能越界,
最后你要返回一个指针数组是不可能的, 因为它是局部变量, 生存期只在这个函数内, 返回值也不正确, 返因指针数组名应用用指向指针的指针,
a[20478]
你定义的函数类型是int 却返回一个数组 肯定不行的
你的是冒泡排序 可以这样写
void as(int *p) { int i,j,k; for(i=1;i<=9;i++) for(j=0;j<10-i;j++) if(*(p+j+1)<*(p+j)) { k=*(p+j+1); *(p+j+1)=*(p+j); *(p+j)=k; } }