2012-02-12 64 views
0

考慮以下c代碼:解釋C的結構

typedef struct ELE *tree_ptr 

struct ELE { 
    long val; 
    tree_ptr left; 
    tree_ptr right; 
}; 

相信ELE封裝二叉樹的一個節點。每個節點都有一些32位值(val),一個pointer指向左側節點,而pointer指向右側節點。

有人可以確認我的解釋是正確的嗎?

另外,是ELE只是一個任意的變量名或一些約定用於命名struct

編輯:

如果什麼有生成下列3行的彙編代碼C程序:

movq  %rbx, -24(%rsp) 
movq  %rbp, -16(%rsp) 
movq  %r12, -8(%rsp) 

這些是3行騰出棧上的結構的3個元素?

+0

編輯在我看來似乎是一個完全不同的問題,與原文無關。如果你問它作爲一個不同的問題,你會得到更好的迴應,並有更多的上下文。該彙編代碼可以由一百個不同的C源代碼生成:-)這些指令都沒有爲堆棧分配任何空間,因爲它們不會更改堆棧指針'rsp'。 – paxdiablo 2012-02-12 05:32:13

回答

2

這很可能是ELEment,集合的一個元素。

其他一些需要考慮的要點:

  1. typedef需要一個分號結束。
  2. C標準不保證long整數是32位。
  3. 類型tree_ptr表明它可能是是一個二叉樹,但您所知道的確實是它是一個包含long的結構以及與該結構相同類型的兩個指針。這很可能是一個雙向鏈表如果放在一起的編碼器是錯亂或虐待狂足夠:-)
+0

這就是我的直覺告訴我,我只是想確保。謝謝 – 2012-02-12 04:11:33

1

ELE是結構的所謂標籤。標籤位於與C中其他名稱不同的名稱空間中(其他名稱空間是各個結構和聯合體的成員,標籤和其他名稱空間(如變量名稱,函數名稱等))

所以ELE(最有可能對於「Element」)在struct/union/enums的名稱空間內引用此結構。