2012-01-29 97 views
0

你好,夥計們!動態創建C中的對象

我熟悉JavaScript和PHP,但對C來說是新的。我試圖在C和Craete碰撞算法中使用圖形。現在,我需要動態創建對象,就像更高級的語言一樣。例如,我需要通過自己的函數創建一個多邊形,並使其成爲整個腳本可見的對象。我假設,將需要一個結構。

據我所知,函數中聲明的所有內容都保留在函數中。我該如何動態聲明全局結構?

回答

1

C是一種相當靜態的語言。通過靜態我的意思是,你可以在運行時創建內存,但是你需要指針來解決在編譯時聲明的內存。這就是說,如果您在運行時需要內存,並且不希望在編譯期間聲明內存,則需要使用malloc和free(當您完成內存時)。

要創建一個可以在運行時創建內存的全局結構,最少需要編譯時指向結構的指針。如果你需要幾個這樣的結構,你可以創建幾個結構的內存價值,但是如果沒有這些結構的數組,那麼遍歷這些結構將是單調乏味的。在編譯時您需要指向結構的指針數組。有一些方法可以使它更具動態性,但是十年左右我使用C和C++,我們從未遇到過其他方式,包括設備驅動程序。

當你說在C中創建對象時,除了通過函數調用庫或從堆創建內存創建的對象之外,實際上沒有任何對象可以創建,然後通過重疊結構或數組指針來解釋該內存它。

如果通過引用(指向參數的指針)傳遞參數,函數可以改變參數,函數可以不返回任何數據或返回單個數據原子,char,integer,smallint或指針。

1

a。函數可以返回值。

b。你可以使用全局變量。

c(可能是最有用的)。動態分配內存(使用malloc等)並返回指針。 (並記住在使用後釋放它)

+0

我想你真的是指「你**不會**使用全局變量」 – CAFxX 2012-01-29 21:41:43

+0

:)但在正確的情況下,它們是有用的。 – asaelr 2012-01-29 21:42:57

+0

只有當你知道你在做什麼。我想冒險猜測OP沒有。 – CAFxX 2012-01-29 21:44:25

1

您需要有一個結構或更復雜的抽象數據類型(ADT)來容納您的動態創建的變量。一旦你有了這個,你可以通過malloc()創建你想要的任何對象,並將其存儲在那裏。

正如我前面提到的那樣,強烈建議查看ADT並學習如何使用它們。這將允許您創建任何複雜的數據結構,如隊列或鏈接列表,以便更多地面向OOP。

1

聲明與結構相同類型的全局指針(指針數組)。使用像malloc等函數來動態分配內存並將其分配給指針。