鱼C论坛

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

[已解决]代码问题求助

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

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

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

x
本帖最后由 a1557944 于 2020-3-15 20:06 编辑
#include <stdio.h>
int* filter(int[],int);
int* sort(int[]);
int count=0;
int main()
{
int num=12,array[]={23,45,65,0,9,25,0,34,0,56,44},i;
int *p=filter(array,num);
printf("new array:");
for(i=0;i<num;i++)
printf("%d\t",*(p+i));
}
int* filter(int array[],int num)
{
int arrayA[num],i;
for(i=0;i<num-1;i++)
if(array[i]!=0)
{
arrayA[count]=array[i];
count++;
}
int arrayB[count];
for(i=0;i<=count-1;i++)
arrayB[i]=arrayA[i];
int *s=sort(arrayB);
return s;
}
int* sort(int array[])
{
int i,j;
for(i=0;i<=count-2;i++)
for(j=i+1;j<=count-1;j++)
if(array[i]>array[j])
{
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
return array;
最佳答案
2020-3-15 18:13:54
本帖最后由 就是要努力呀 于 2020-3-15 18:15 编辑

arrayB是一个左值,左值是不可更改的,你想要保留在sort函数内对arrayB的改动,应该传入arrayB的指针
void sort(int **array);
sort(&arrayB);
或者用一个新的指针去保存sort函数的返回值
int *parrayB;
parrayB = sort(arrayB);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-15 17:14:26 | 显示全部楼层
能描述清晰一点吗?
没有太听懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 17:17:25 | 显示全部楼层
能描述清晰一点吗?
没有太听懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

另外,还有一处错误,arrayB是函数filter的内部变量,好像不能作为返回值吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 17:25:43 | 显示全部楼层
sort不是系统内置函数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int*和int型的指针有什么区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int*就是int型的指针,但是数组不是指针啊。
arrayB=sort(arrayB),赋值语句左侧是int型数组,右侧是int型指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

把一个数组中所有的0去掉生成新的数组并排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

arrayB是一个左值,左值是不可更改的,你想要保留在sort函数内对arrayB的改动,应该传入arrayB的指针
void sort(int **array);
sort(&arrayB);
或者用一个新的指针去保存sort函数的返回值
int *parrayB;
parrayB = sort(arrayB);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 20:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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