C语言函数传入参数为什么会出现原本的数值和传入后的数值不一样这样的错误,明明应该没有溢出?

#include<stdio.h>#include<math.h>#include<malloc.h>#defineMAX_SIZE100float**Runge_Kut... #include <stdio.h>#include <math.h>#include <malloc.h>#define MAX_SIZE 100float** Runge_Kutta_2(void(*func), float t, float h, float init);float func_test(float t, float y){ float a = (float)(exp(-y)); float b = (float)(t * t); printf("%f %f %f\n",a,b,t); return (a-b);}int main() { float** p; p = Runge_Kutta_2(func_test, 10.0f, 0.001f, 0.0f);}float** Runge_Kutta_2(float(*func)(), float t, float h, float init){ float* Y, *T; float* P[2]; float K1 = 0, K2 = 0, K = 0, time = 0; int k=0,num=1; Y = (float*)malloc(MAX_SIZE * sizeof(float)); T = (float*)malloc(MAX_SIZE * sizeof(float)); Y[0] = init, T[0] = 0; while (time <= t - h) { K1 = func(time, Y[k]); K2 = func(time + h, Y[k] + h * K1); printf("%f\n", time + h); time += h; //printf("%f %f\n", Y[k], T[k]); (*(Y+k+1)) = (*(Y+k)) + h / 2 * (K1 + K2); (*(T + k + 1)) = time; k++; if (k == MAX_SIZE * num - 1) { num++; Y = realloc(Y, num * MAX_SIZE); T = realloc(T, num * MAX_SIZE); } } P[0] = Y,P[1] = T; return P;} 展开
 我来答
司马刀剑
高粉答主

2019-09-25 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7413万
展开全部
1 所有的参数传递,都是传递值的拷贝。(如果想知道为什么,去学习编译原理的函数调用的参数压栈和出栈对应内容)。
2 C传指针进去,其实也是把这个指针值按拷贝传送进去。但是因为指针值指向一块外部内存空间(其实更多是堆空间,或外层栈变量空间),所以感觉可以在函数里改变外部变量。其实本质还是按拷贝传递,只是传递进去的是一个访问变量的渠道。
因此,如果我们希望函数内能改变外部的指针值,往往传进去的是指针变量的指针。呵呵,很多初学C的程序员,对**非常难理解。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式