2014-02-19 123 views
2

我的代碼如下:爲什麼下面的C代碼編譯沒有錯誤?

void main() 
{ 
    int gdriver=DETECT, gmode; 

    initgraph(&gdriver, &gmode, " "); 

    getch(); 

    closegraph(); 
} 

雖然圖形模式(GMODE)的值尚未初始化,它的地址已經被傳遞到程序......它並沒有錯誤編譯!

傳遞變量的地址而不初始化該變量是否錯誤?

+1

單獨的'void main'是錯誤的:http://stackoverflow.com/q/204476/1619294 –

+1

您正在向函數傳遞一個_pointer_變量,並且指針不是未初始化的,它指向的是什麼至。 –

+1

如果initgraph在任何人讀取之前寫入gmode,那麼錯誤在哪裏?現在問:編譯器如何看待'main'是否知道這是否爲真? – asveikau

回答

0

首先,雖然您也標記了C++,但在上面的代碼中,參數的傳遞不是通過引用傳遞,而是通過值傳遞。

graphics mode(gmode) has not been initialized

其次,它應該不會給你一個錯誤,因爲它不是一個引用變量。

2

您傳遞gmode的地址,而不是對它的引用。您無需初始化gmode,因爲功能initgraph()可能會這樣做。

雖然您可能會收到警告,具體取決於您使用的編譯器和編譯器選項。

0

現在我得到了答案......當我們編寫gdriver=DETECT時,它返回的值爲 - gdrivergmode

這是因爲DETECT是枚舉數據類型,它將gdrivergmode映射到根據圖形驅動程序和模式值。這就是爲什麼我們在通過地址之前不需要初始化gmode