永发信息网

C语言 int as(int a[],int n) 错在哪里

答案:4  悬赏:20  手机版
解决时间 2021-04-11 01:02
  • 提问者网友:城市野鹿
  • 2021-04-10 19:14

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;
}

最佳答案
  • 五星知识达人网友:酒醒三更
  • 2021-04-10 19:30

你的意图是传递一个数组, 然后再将用一个指针数组来存入该数组每个元素的地址, 通过指针交换来交换数组元素, 然后返回这个指针数组, 如果是这样的话, 就指出以下错误, 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])



总之不能越界,



最后你要返回一个指针数组是不可能的, 因为它是局部变量, 生存期只在这个函数内, 返回值也不正确, 返因指针数组名应用用指向指针的指针,


全部回答
  • 1楼网友:举杯邀酒敬孤独
  • 2021-04-10 22:36
我看出两点:一,int*b[n]数组大小应该是常量,n是变量!二,函数反回值是整型,你反回的b是地址常量!
  • 2楼网友:轻熟杀无赦
  • 2021-04-10 22:04

a[20478]

  • 3楼网友:往事埋风中
  • 2021-04-10 20:42

你定义的函数类型是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; } }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯