2014-01-30 159 views
1

在這裏有兩件事情,我似乎無法找到答案......我正在爲我們(我們3歲)開發整個大學的一個項目工作棋盤遊戲的客戶端(例如服務器通信和AI)。現在我們的大型演講即將到來,過去兩天似乎無法與我的任何夥伴保持聯繫......指向C中的結構和內存分配的指針

我們的整個程序已經正常運行,沒有任何問題,但有兩個定義/聲明我不完全得到。

在globals.h中,我們定義了多個結構,我們在不同的.c文件中使用這些結構,特別是在我們的main.c文件中。

爲全局變量,我們在main.c中聲明

Game* GAME = (Game*) -1; 

遊戲*是我們在全局頭文件中定義的結構,然而......這到底是什麼?我們創建了一個類型爲Game的指針GAME,但'(Game *)-1'是什麼?做?它是否將結構的所有組件設置爲'-1'?這是否聲明GAME結構獲取sizeof(遊戲)分配的內存或指針的大小,或[...]?如果不是,聲明分配多少內存?

第二條語句聲明的main.c中的局部變量裏面:

Config* config; 

其中配置也指我們的全局頭一個結構。我們的Config類型的指針配置是否獲得了此時分配的內存?系統是否將所有值設置爲某種默認值,或...?

謝謝!

+0

應該指向「無處」的指針通常是指向「NULL」,例如, '遊戲* GAME = NULL;' –

回答

3
Game* GAME = (Game*) -1; 

1)您只需要聲明一個指針,你不分配的結構,你只需將它設置爲-1(也許它會更好,把它放到NULL)。

Config* config; 

2)不,它不佔用內存,這也只是一個指針。

指針只是包含內存位置地址的變量,不會執行實際分配。

1
Game* GAME = (Game*) -1; 

這只是全局變量的聲明。它被分配了一個無效指針,以確保它在後來被初始化。最好將它設置爲NULL。 它可能是在另一個地方初始化的。 我希望以下內容:

在globals.h

extern Game* GAME; // Making this global variable shared between files 
在globals.c

(或其他地方)

Game* GAME = (Game*) -1; // Just an invalid initialization 

。C(或其他地方):

GAME = malloc(sizeof(Game)); // Allocate memory and point to it 
if (!GAME) 
    error 
0

我想補充一點,你可以分配內存,並以這種方式指向它:

GAME = (Game*)malloc(sizeof(Game)); 

的malloc返回一個空的指針(void *),它可以被轉換爲所需類型的數據指針(在這種情況下,它是Game *)以便可解引用。