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吧

c语言如何在自定义函数中改变主函数数组值?
必须把数组的地址作为参数给子函数传进去 然后里面c[3]=4;即可完成第一个,下面类似

C语言 主函数中输入数组 怎样在子函数中调
把数组名作为实参,传递给子函数即可,这是地址传递,子函数中处理的结果将影响到主函数数组的元素值。课本上“数组做函数参数”部分应该有例子可以参考。

C语言如何在子函数中对主函数中的二维数组值进行修改? 二维数组已经在...
如果用二维数组,以上用指针实现的过程中把维数设成变量就可以了,但是这样初始化时稍微有点儿麻烦。 还有一种做法,就是使用一维数组来存储二维数据的值,比如把int a[5][10]转换为int a[50],在读取时进行坐标转换,效果也是一样的,如:int getelement(int *a, int i, int j){ return a[i*10+j];}void ...

c语言中如何在子函数中调用主体函数的结构数组
有两种方式:1.将结构体声明为全局变量 2.将改结构体作为参数传给子函数,这样子函数就可以使用该结构体了

若想在子函数中对一个数组进行改变是不是只能将指针传递过去,而不可能...
因为在函数调用语句里面作为参数的数组名必然自动转换为指针,因此C语言是不可能传数组的……

C语言:数组值无法改变
这个值就给了被调用函数中的另一个变量。当然你在被调用函数中是无法改变主函数中的数组的。你如果想要在被调用函数中改变主函数中数组的值,那么你要用地址传递,就是把你的主函数中数组的地址传给被调用函数,那么,被调用函数就直接操作这个地址中的值,也就改变了主函数中的数组的值。

问:求c语言怎么把数组赋值到子函数里才可以用 下面这个程序希望返回值...
\/\/例子#include <stdio.h> void function(char a[][10]) { for(int i = 0 ;i < 4; i++) { printf(" %s \\n", a[i]); printf(" %c \\n", a[i][2]); \/\/ 每行输出最后一个元素 } printf(" %s \\n", a[i]); \/\/越界访问 } void function2(cha...

c语言 main函数调用子函数后,怎么获取子函数的返回值\/数组 ,并将返回...
++i){ a[i] = b[i];} 如果在函数里面,最好不要返回值为数组,而是参数为数组 例如:fun(int a[], int size){ ………} 调用的时候 main(){ int a[10];fun(a, 10);} 这样你在fun里对于数组a的操作都会影响到main函数里的a 因为fun的参数a已经退化成指针,相当于传址调用。

为什么c语言中,数组可以用void调用,既然没有返回值,为什么在主函数中...
void sum(int x,int y){};这种是地址调用,是不会影响到实参的值的,要是按照地址调用(指针调用),是共享同一个存贮空间的,也就是改变的是同一个内存里面的内容,数组名的调用,就是指针调用的一种,int arr(int array[],int n){},你在函数里面改变array[]的值,实参里面也会改变的 ...

C语言中,主函数中已经赋值的数组怎么调用到子函数
如果要求每一门功课的 平均成绩,你的循环需要修改 4:函数的调用是压栈的过程,你的函数没有返回值所以不可以return b[5],如果想要返回一个数组你应该在主函数中先定义然后向自定义函数中传入子函数地址,这样就可以保存每门功课的成绩了 希望可以帮到你 ...

相似回答