C在函数中传递int?

时间:2013-02-10 03:53:08

标签: c

在函数中传递int时,我得到的结果不正确:

int recruit(int var1, int re_unit, char *char_buffer, int var2) {
 int run = 1;
 int int_buffer = 0;
 printf("Test1 %d\n", var1);
 printf("Test2 %d\n", var2);
 ...
}
void some_other_function(structs, struct1[]) {
 int var1 = 0;
 int var2 = 0;
 int re_unit = 0;
 char char_buffer[] = "What ever";

 //strucs[1].first = 50 this is done in a other section

 var1 = strucs1[1].first;
 var2 = strucs1[1].first;


 recruit(var1, re_unit, char_buffer, var2);
  // Ind the full verstion of the program this function is called 2 times:
  // The first time nothing is worng, how ever the second time, the result
  // is as explaned below


  //strucs[2].first = 50 // this is done in a other section
  var1 = struct1[2].first;
  var2 = struct1[2].first;

 recruit(var1, re_unit, char_buffer, var2);

}

int main(void) {
 ...
}

现在的结果就是这样  第一次  Test1打印:2684032,和  Test2打印:50

第二次  测试1打印:2684032和  测试2打印:50;

他们应该全部打印50。

我已经测试过struct1 [1] .first的值在它被用于函数recruit之前是50。

有没有人知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

C函数中未初始化的值不是0,它们只是在特定时刻内存的垃圾......

#include <stdio.h>
int main()
{
    int a;
    printf("%i\n", a);
    return 0;
}

那应该证明这个想法......

希望我正确地解释了这个问题。

答案 1 :(得分:0)

请将此声明int recruit(int lvl, int re_unit, char *char_buffer, int u_lvl, int lvl2)更改为int recruit(int lvl, int re_unit, char *char_buffer, int lvl, int lvl2)。由于未初始化的变量,您正在观察不正确的值。