永发信息网

C语言 主函数传递数组给子函数

答案:4  悬赏:0  手机版
解决时间 2021-03-10 07:09
  • 提问者网友:黑米和小志
  • 2021-03-09 08:15
while(1)
{
choice = display();
if(choice > 0 && choice < 4)
{show(choice,seat);}
if(choice > 3 && choice < 6)
{modify(choice,seat);}
if(choice == 6)
{save(seat);}
else if(choice == 0)
{
fwrite(&seat[i],sizeof(struct Reserve),1,fp);
break;
}
}

这是主函数的一部分,用户输入了选项后主函数分别讲seat传递给show或modify或save,子函数执行完操作后又回到等待输入,再根据选项进行下一次传递。
问题是其中某个子函数对seat的处理无法保存下来,下一次传递给其它子函数的seat还是初始化时候的值。求解。其中seay[20]是一个结构体数组、

在书上看到一个类似的例子,却可以正常执行:
int num[NUMEL] = {xx,xx,xx,xx,xx,xx};
int move,i;

move = select(num,NUMEL); /select对num数组进行排序处理,最后返回的是move/

for(i = 0 ; i < NUMEL ; i++)
{
printf("%d",num[i]);
}
printf("%d",move);
return 0;

这个程序中,最后打印的num数组是已经被select排序过了的,这里为什么保存并可以返回到主函数中继续用
我上面的函数就不能保存呢 要怎么改
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-03-09 08:45
你的代码不全,我只能给你分析一下这种情况常见的错误了。
1、要返回数组定义在子函数中。在函数体内部定义的数据变量,如果未加修饰符(static和extern),那么她是局部的,函数执行完毕之后内存释放,造成你访问错误。你下边的那个例子定义的数组是全局变量,先不说了下班了晚上补充
全部回答
  • 1楼网友:举杯邀酒敬孤独
  • 2021-03-09 12:37
能不能把seat的声明,和show modify save的声明贴出来看下呢?最好是全部代码,单看着点代码看不出来的!
  • 2楼网友:逃夭
  • 2021-03-09 11:10
按理来说不会这样子,因为c语言里面参数传递数组一般是传递地址,你看看在子函数里面是不是直接操作数组。
  • 3楼网友:雪起风沙痕
  • 2021-03-09 09:58
把参数写成指针或者数组即可。 实例: #include<stdio.h> int *arry ( int a[]); int main () { int a[]={0,1,0,1,1,0,1,0}; int *b =arry(a) ; int i; for (i = 0;i<8;i++){ printf ("%d " , a[i]); } return 0; } int *arry ( int a[]) { int i; for (i = 0;i<8;i++){ if (a[i]==0){ a[i]=1; } else { a[i]=0; } } return a; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯