[英]what is meaning of `*(unsigned int*)((unsigned int)block + n*i)`
void* block = ::operator new(n*size);
int i;
for(i = 0;i<BLOCK_SIZE -1;i++){
*(unsigned int*)((unsigned int)block + n*i) = (unsigned int)block + n*(1+i);
}
*(unsigned int*)((unsigned int)block + n*i) = 0;
問題>我無法理解上述代碼的含義。 似乎一個內存塊指向下一個內存塊。
有人可以向我解釋嗎?
block[0] = &block[1]
block[1] = &block[2]
block[2] = &block[3]
.
.
.
block[n] = 0 // dereferenced so not NULL, assigned zero as a value
AFAIS,它從頭到尾指向下一個元素。 盡管上面的演示看起來很簡單,但這是代碼背后的邏輯。
您已經非常正確了-它分配了一塊內存,然后將其視為多個節點,並將它們鏈接在一起作為鏈接列表。
就目前而言,它看起來毫無意義,因為它沒有分配任何內存來存儲數據以及節點之間的鏈接(嗯,也許確實如此-也許n
實際上大於sizeof(unsigned *)
和size
大於BLOCK_SIZE
,因此可以容納較大的項目)。
如果我打算做這樣的事情,我可能會寫這樣的代碼:
unsigned *block = (unsigned *)::operator new(n*size);
for (size_t i=0; i<size-2; i++)
block[i] = &block[i+1];
block[size-1] = nullptr;
當然,由於缺乏這樣做的理由,這也值得商most-大多數代碼可能都可以滿足以下要求:
std::vector<unsigned *> block(size);
for (int i=0; i<size-2; i++)
block[i] = &block[i+1];
block[size-1] = 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.