鱼C论坛

 找回密码
 立即注册
查看: 1016|回复: 8

[已解决]代码问题求助

[复制链接]
发表于 2020-3-15 17:12:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 a1557944 于 2020-3-15 20:06 编辑
  1. #include <stdio.h>
  2. int* filter(int[],int);
  3. int* sort(int[]);
  4. int count=0;
  5. int main()
  6. {
  7. int num=12,array[]={23,45,65,0,9,25,0,34,0,56,44},i;
  8. int *p=filter(array,num);
  9. printf("new array:");
  10. for(i=0;i<num;i++)
  11. printf("%d\t",*(p+i));
  12. }
  13. int* filter(int array[],int num)
  14. {
  15. int arrayA[num],i;
  16. for(i=0;i<num-1;i++)
  17. if(array[i]!=0)
  18. {
  19. arrayA[count]=array[i];
  20. count++;
  21. }
  22. int arrayB[count];
  23. for(i=0;i<=count-1;i++)
  24. arrayB[i]=arrayA[i];
  25. int *s=sort(arrayB);
  26. return s;
  27. }
  28. int* sort(int array[])
  29. {
  30. int i,j;
  31. for(i=0;i<=count-2;i++)
  32. for(j=i+1;j<=count-1;j++)
  33. if(array[i]>array[j])
  34. {
  35. int temp=array[i];
  36. array[i]=array[j];
  37. array[j]=temp;
  38. }
  39. return array;
复制代码
最佳答案
2020-3-15 18:13:54
本帖最后由 就是要努力呀 于 2020-3-15 18:15 编辑

arrayB是一个左值,左值是不可更改的,你想要保留在sort函数内对arrayB的改动,应该传入arrayB的指针
  1. void sort(int **array);
  2. sort(&arrayB);
复制代码

或者用一个新的指针去保存sort函数的返回值
  1. int *parrayB;
  2. parrayB = sort(arrayB);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-15 17:14:26 | 显示全部楼层
能描述清晰一点吗?
没有太听懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 17:17:25 | 显示全部楼层
能描述清晰一点吗?
没有太听懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 17:23:55 | 显示全部楼层
不是不能传递。是返回值赋值出错了。
sort()函数的返回值为int*,你将int类型的指针赋值给了数组。所以出错了。

另外,还有一处错误,arrayB是函数filter的内部变量,好像不能作为返回值吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 17:25:43 | 显示全部楼层
sort不是系统内置函数吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 17:30:58 | 显示全部楼层
sunrise085 发表于 2020-3-15 17:23
不是不能传递。是返回值赋值出错了。
sort()函数的返回值为int*,你将int类型的指针赋值给了数组。所以出 ...

int*和int型的指针有什么区别?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 17:35:48 | 显示全部楼层
a1557944 发表于 2020-3-15 17:30
int*和int型的指针有什么区别?

int*就是int型的指针,但是数组不是指针啊。
arrayB=sort(arrayB),赋值语句左侧是int型数组,右侧是int型指针
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 17:36:18 | 显示全部楼层
qiuyouzhi 发表于 2020-3-15 17:17
能描述清晰一点吗?
没有太听懂

把一个数组中所有的0去掉生成新的数组并排序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 18:13:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 就是要努力呀 于 2020-3-15 18:15 编辑

arrayB是一个左值,左值是不可更改的,你想要保留在sort函数内对arrayB的改动,应该传入arrayB的指针
  1. void sort(int **array);
  2. sort(&arrayB);
复制代码

或者用一个新的指针去保存sort函数的返回值
  1. int *parrayB;
  2. parrayB = sort(arrayB);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表