2011-11-29 79 views
0

傢伙我有一個問題是關於點結構說明,當我閱讀有關的幾何數據類型聲明教程中,我已經看到了其中兩個搞糊塗了奇怪的事情,我將展示這些東西知道對不對申報點結構

typedef double point[DIMENSION]; 
typedef struct { 
    int n;   /* number of points in polygon */ 
    point p[MAXPOLY]; /* array of points in polygon */ 
} polygon; 


typedef struct { 
    point p1,p2;  /* endpoints of line segment */ 
} segment; 

typedef point triangle[3]; /* triangle datatype */ 

讓我們假設維數是一些數字,例如(2)和maxpoly最大點數在多邊形中,我很困惑與點的聲明 什麼意思是typedef double point [dimension] ?,我知道什麼是typedef,但是在我們聲明爲double數組的情況下,我們如何在另一個結構中使用它

或類作爲對象?像結構數組? 考慮這個

typedef truct 
{ 
point p1,p2; 
}segment; 

是多麼正確的嗎?請幫我理解這

+0

您的代碼不包含任何#define,但您正在詢問#define。 –

+0

你的問題中的'#define',它是否正確?使用預處理器來改變關鍵字的含義是一個可怕的想法。 –

+2

也許你在混淆'#define'和'typedef'的含義?這是兩回事。 – jrok

回答

3

使用typedef定義的東西只是另一種類型的別名(即另一個名稱)。

在你的情況

typedef double point[DIMENSION]; 

這定義了名稱point意味着「類型的雙尺寸維度的陣列」。

在此之後,而不是寫

你可以寫

point my_point; 

如果類型定義是在頭文件,名字可在所有源文件和頭文件包括標題中使用文件與typedef。

1
#define double point[dimension] 

意味着一個點是在2個維度2個雙打,3個3等 但你不應該看着那個! 面嚮對象語言的要點是你不需要知道類的內部細節。你只需要知道API - 如何使用它。

事實上,類重載操作符,因此賦值工作等。您可以像在任何其他類一樣使用結構體中的點。 C++允許嵌套結構或結構數組。

+1

我不會觸及重新定義內置類型的API。 – jrok

+0

我不知道教程dato正在閱讀什麼教程,原來的問題現在已經被編輯過,但我認爲這只是爲了教學目的。最有可能的教程最初是在C. –