c语言如何在子函数中改变主函数数组值?

double Y[8];

main()
{
void rk(); /* 调用rk函数*/
int i,j;
double h; /* h为步长*/
fi=fopen("C:\\Users\\Administrator\\Desktop\\input2.dat","r");
for(i=0;i<8;i++)
fscanf(fi,"%lf",&Y[i]); /* 从文件中读取Y数组值*/
close(fi);
rk(8,h);

do{
rk(8,h);}
while(Y[6]<=100);
}
/* **********************************************************************************************/
void rk(n,h)
int n;
double h;
{
int i;

for(i=0;i<n;i++)
Y[i]=Y[i]+h;
return;
}
我的程序简化成上面,为什么Y数组里面的值一直都是初始值?有大神吗

两种方法.
一:
把a作为参数传递给sss();
int sss(int x)
{x ;
}这样仅仅只是使用a的值,是把a的值复制给x,使x的值等于a,可以在子函数中使用a的数值,但无法改变主函数中a的值.
二,
使用指针.声明一个指针指向a,把a的地址作为参数传递给子函数,那么在子函数中不但可以使用a的值还可以修改主函数中a的值.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-24
变量有全局变量和局部变量之分,要想子函数改变母函数的变量值有两种办法:
1是将变量定义成全局变量(在#include下面就定义),然后在子函数中直接使用变量名。
2是将指向该变量的指针当作参数传递给子函数。追问

我这个Y[8]是在#include下面定义的,为什么不能改变他的值

追答

函数定义语句void rk(n,h)中n和h没有类型

追问

有啊 大哥 再说这个跟数组赋值有什么关系

第2个回答  推荐于2017-11-26
你的程序恐怕连编译都不能通过吧,有语法错误。追问

我源程序能编译 这不是简化了 随便打得 主要是看数组值怎么变啊

追答

你最好把你的可以编译的程序贴上

追问

原程序几百行你看吗,再说我上面这个程序就少了个#include和FILE *fi 就能编译

追答

你重新看下rk函数,是不是里面又定义了一个名为Y的局部变量。你可以rk函数里试试直接更改Y[0]的值看是否会改变还有,你的h值是否为0

本回答被提问者采纳
第3个回答  2018-02-27
你那个h好像始终是0吧
相似回答