簡體   English   中英

* *(unsigned int *)((unsigned int)block + n * i)是什么意思

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM