C 调用函数时,某些数据会从指针中消失

C 调用函数时,某些数据会从指针中消失,c,function,pointers,function-call,C,Function,Pointers,Function Call,[编辑]主要问题是,每次将一些int值更改为float值后,我的进化适应度都返回相同的值。错误的一点是,我重新启动了计算机,它令人惊讶地再次工作 我从main调用函数,当我调试代码时,变量包含数据,但在函数的标题中,当我调试时,数据丢失,内存引用相同(我使用visual Studio 2013编译),这只发生在一些变量中(您可以检查下图中的哪些变量) (初始化,一些相关的是) 我的函数的标题如下: int generacion(int poblacion[NUMCROMOSOMAS][SIZEC

[编辑]主要问题是,每次将一些int值更改为float值后,我的进化适应度都返回相同的值。错误的一点是,我重新启动了计算机,它令人惊讶地再次工作

我从main调用函数,当我调试代码时,变量包含数据,但在函数的标题中,当我调试时,数据丢失,内存引用相同(我使用visual Studio 2013编译),这只发生在一些变量中(您可以检查下图中的哪些变量)

(初始化,一些相关的是)

我的函数的标题如下:

int generacion(int poblacion[NUMCROMOSOMAS][SIZECROMOSOMAS], 
               float resultados[NUMCROMOSOMAS][CANTIDADMEDICIONES], 
               int in[CANTIDADMEDICIONES][NUMVAR],
               float valoresEsperados[NUMCROMOSOMAS][CANTIDADMEDICIONES], 
               char gramaticas[NUMCROMOSOMAS][LONGITUDCADENA], 
               char * mejorIndividuo, 
               char variableNames[NUMVAR], 
               float fitness[NUMCROMOSOMAS]){
这是调用前的编译器 这是调用之后的编译器


我做错了什么?

当你有这样一个参数声明时

int in[CANTIDADMEDICIONES][NUMVAR]
这并不是编译器真正使用的,而是它转换成的

int (*in)[NUMVAR]
换句话说,中的
是指针而不是数组

您在函数中的调试器中看到的是指针,但由于指针指向的数据大小未知,调试器无法直接显示数据。如果在函数中的调试器中显式选中[0]
中的
,您将看到数据是正确的


换句话说,这不是代码的问题,而是调试器如何显示(或者更确切地说不显示)数据。

到底是什么让你困惑?该程序代表了语法的演变,但令人惊讶的是,我的适应度始终是一样的,这发生在我更改一些变量时,我更改了整数精度。它变成了双精度。我很困惑,因为重新启动机器后,我的程序又能正常工作了。有什么提示吗?调试器显示其他2D数组参数的元素很好,这可能令人惊讶(不仅仅是OP)。
poblacion
中的
有什么区别?啊,仔细看看就会发现这个问题。正如您所说的,generacion()的
中的形式参数
是指向数组的指针。默认情况下,调试器显示指针后面的数据。它知道如何显示数组:它显示所有元素,每个元素都用大括号表示。对于
poblacion
,它是指向128个整数数组的指针。如果我们仔细看的话,它对
中的
也是这样<在
中,code>恰好是一个指向1 int(
NUMVAR
为1)数组的指针,该数组的值为0。调试器不会在+1
poblacion+1
中显示
的内容(因为这可能是不可访问的内存)。@PeterA.Schneider因此,如果in的大小更大,它可以显示出来?@Kaostias它已经显示出来了(注意值列中的小
{0}
)。因为
NUMVAR
是1,
中的
main
是一个只有一列的二维数组;作为函数的一个参数,它被“调整”为指向第一行的指针,第一行是所述数组,带有一个正确显示的元素
0
。如果打开手表窗口,您可以修改要计算的表达式,例如,让手表在[1]
中显示
,或在[1][0]
中显示
int generacion(int poblacion[NUMCROMOSOMAS][SIZECROMOSOMAS], 
               float resultados[NUMCROMOSOMAS][CANTIDADMEDICIONES], 
               int in[CANTIDADMEDICIONES][NUMVAR],
               float valoresEsperados[NUMCROMOSOMAS][CANTIDADMEDICIONES], 
               char gramaticas[NUMCROMOSOMAS][LONGITUDCADENA], 
               char * mejorIndividuo, 
               char variableNames[NUMVAR], 
               float fitness[NUMCROMOSOMAS]){
int in[CANTIDADMEDICIONES][NUMVAR]
int (*in)[NUMVAR]