简单的C程序跟踪数组

Simple C Program Trace-Array

本文关键字:跟踪 数组 程序 简单      更新时间:2023-10-16

嘿,伙计们,我正在复习明天考试的练习测试,上面有一个C程序的代码,如下所示。需要显示程序的所有输出

int rocky[5]={1,-3,5,-7,9};
int moonman (int cloyd);
int skunch (int doofus);
int main (void)
{
   int i, sum;
   sum=0;
   for (i=1; i<3; i++)
   {
      sum=sum+moonman (i)-rocky[i]; // this is where I get lost..
                                    // do i jump to the moonman
                                    // then come back?
      printf("Sum is now %dn", sum);
   }
   return 0;
}
int radium;
int moonman(int cloyd)
{
   int gaspar;
   printf ("Entering moonman, cloyd is %dn", cloyd);
   radium=0;
   gaspar=skunch(cloyd*2);
   gaspar=gaspar*radium;
   printf("gaspar is %dn", gaspar);
   radium++;
   return (gaspar);
   radium++;
   return (gaspar);
}
int skunch (int doofus)
{
   printf ("entering skunch, doofus is %dn", doofus);
   if (radium>0) radium--;
   return (radium*doofus);
}

了解程序正在做什么的好方法是使用调试器简单地遍历它们:

http://www.cs.cmu.edu/吉尔平著/教程/

moonman返回int值。

你提到的那行:

sum=sum+moonman (i)-rocky[i];

在每个循环中,moonman被调用为i的连续值。在这种情况下,循环只运行两次,首先是i == 1,然后是i == 2。这意味着在第一次执行循环时,调用moonman,并以1作为形参。

当调用moonman这样的函数时,它可以返回一个值,如本例中的int。因此,在上面的行中发生的事情是,moonman被调用(即执行"跳转"到moonman),然后返回计算出的特定值。

例如,moonman返回6的值。在这种情况下,上面的行变成:

sum = sum + 6 - rocky[i];

其中6moonman(i)返回的值。同理,将rocky[i]sum替换为它们的值进行计算。

如前所述,使用调试器可以帮助您轻松识别诸如此类的程序是如何工作的。然后,您应该能够跟踪并看到循环内部发生了什么。查看gdb并使用调试符号编译,然后逐步执行代码。