由於這個問題所暗示的,什麼是平常節點的大小:一個節點的大小是多少?數據保存在哪裏?
struct node{
int data;
node* next;
};
如果結構保存數據和下一個節點的地址,什麼是指針地址(不是它指向)的大小? 如果下一個指向NULL,是否有區別?
哪裏是數據(不是指針)保存,棧或堆,如果我做了「新節點」:
node* linkednode= new node;
是答案改變,如果我做了等級節點?
由於這個問題所暗示的,什麼是平常節點的大小:一個節點的大小是多少?數據保存在哪裏?
struct node{
int data;
node* next;
};
如果結構保存數據和下一個節點的地址,什麼是指針地址(不是它指向)的大小? 如果下一個指向NULL,是否有區別?
哪裏是數據(不是指針)保存,棧或堆,如果我做了「新節點」:
node* linkednode= new node;
是答案改變,如果我做了等級節點?
無論成員值是什麼,結構的大小都是固定的。在這種情況下,它可能是8或16字節(取決於您是在32位還是64位平臺上)。如果您檢查例如sizeof(node)
。
大小取決於32位或64位平臺的差異,是因爲指針。指針在32位平臺上是32位(即4字節),而在64位平臺上是64位(即8字節)。 int
類型爲通常爲所有平臺上的32位(4字節),但在嵌入式系統或大型機上可能不同。
64位平臺上不是12字節(4 + 8)的原因是因爲對齊。編譯器將確保指針處於良好的對齊狀態,以加快對該成員的訪問速度。
您可以使用sizeof()
函數輕鬆檢查這些函數,它不僅可以將它應用於您的int
和指針變量,還可以用於節點本身。 通常int
s和指針在32位平臺上是4字節,所以這是實現定義的,可能在其他平臺上有所不同。 node
的總大小可能等於8,但可能不是由於上述原因和/或數據對齊。
「通常」在32位平臺上。 – Johnsyweb
嘗試'sizeof(node)'。 – juanchopanza
這是實現定義,我們不能給你一個答案,只有你的平臺上的編譯器可以。 – nijansen
這取決於。請參閱:http://stackoverflow.com/q/399003/78845 – Johnsyweb