2016-11-25 39 views
-2
int f_point(int kek,int *lol) { 
    *lol *= *lol; 
    return kek; 
} 

int main { 
    int x; 
    std::cin >> x; 
    int *adress_of_x = &x; 
    int a,b = f_point(x,&x); //how does it work? 
    std::cout << a << LINE_JUMP; 
    std::cout << b << LINE_JUMP; 
} 

例如,如果我給2程序然後我會得到0和2。爲什麼?函數中的指針如何在此代碼中工作?

+1

變量a未初始化,因此程序具有未定義的行爲。 –

+0

WTH是否是'LINE_JUMP'? 「std :: endl」的宏定義?你期望'a'包含什麼?初始化僅對'b'完成。 –

+0

弗拉德,不應該返回兩個值(一個來自「返回」,一個來自指針)? – Roman

回答

1
int a,b = f_point(x,&x); //how does it work? 

變量聲明離開a未初始化,並從f_point(x,&x);結果初始化b

因爲它是一個未初始化的變量,在

std::cout << a << LINE_JUMP; 

語句訪問的a值會導致你的程序的未定義行爲。輸出0只是其中一種可能性(包括你的冰箱意外爆炸或小惡魔從你的鼻孔飛出)。

2

b = f_point(x,&x)在本聲明中第一個參數的值是2
您的函數不會更改第一個參數的值並返回相同的值。

您正在通過值傳遞第一個參數,因此它與更新後的值x沒有任何關係。變量a未初始化,因此它正在獲取垃圾值。

相關問題