2013-02-10 97 views
-3

在一個函數傳遞一個INT當我得到不正確的結果: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]。首先是50它在功能上招用前。

有沒有人知道爲什麼會發生這種情況?用C的功能

+0

請提供**實際[SSCCE](http://sscce.org)。** – 2013-02-10 03:56:00

+1

您的變量名稱令人沮喪。 – 2013-02-10 03:56:32

+1

'Duur [hurr] .derp = 50'? **真**? – meagar 2013-02-10 03:59:19

回答

1

未初始化的值不爲0,他們只是垃圾什麼記憶了在那個特定的時刻..

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

這應該驗證這個想法...

希望我解釋這個問題正確。

+0

你在說哪個變量? – paxdiablo 2013-02-10 04:01:58

+0

嗯,我無法理解這個問題,但是//Duur [hurr].derp = 50是評論我們的,所以我認爲奇數值是由於它從未被初始化。所以我認爲Test1會打印:2684032. lvl IS INITIALIZED,但是它會重新初始化爲lvl = Duur [hurr] .derp,它不是初始化的,或者至少我們不知道它初始化的是什麼。這個問題在這個結構中很明顯。至少我認爲杜爾是一個結構... – Dmitry 2013-02-10 04:02:39

+0

我的問題是,這兩個lvl變量設置爲durr [hurr] .depp。即使它沒有初始化,它也不可能同時是兩個值:-) – paxdiablo 2013-02-10 04:08:00

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)。由於未初始化的變量,您正在觀察不正確的值。

+0

WTH?當u_lvl/lvl1沒有被使用時,這將如何解決uninit變量問題? – paxdiablo 2013-02-10 04:05:08

+0

在前面粘貼的代碼段中,'lvl2'是要傳遞的變量的名稱以及函數參數。因此,爲了保持相似的外觀和感覺,我建議將'u_lvl'重命名爲'lvl',因爲這是用來在'recruit'函數內部打印的 – Ganesh 2013-02-10 04:08:45

相關問題