繁体   English   中英

从内存地址中减去?

[英]Subtracting from a memory address?

我试图理解一些看起来像这样的代码:

node* temp = (marker*)(ptr);

node* holder = *((&(temp)) + (-1));

这似乎是从内存地址中减去。

等效于: node* holder = temp->prev;

&(temp)是存储temp的内存地址。 这是当前函数中的局部变量,因此位于堆栈中。

加(-1)等于减1。其行为取决于实现 也就是说,它要么返回堆栈中的下一个地址(在这种情况下为holder的地址),要么返回堆栈中的前一个地址,而我们从其余代码中看不到它的含义。 根据情况,它甚至可能是传递给函数的参数之一。

无论哪种方式,评论者都指出该代码完全有效的事实似乎是偶然的。

相当于temp-> prev;

如果每个节点都是独立分配的(即不在数组中),则内存地址可能会相距很远。 因此,从内存地址中减去一个绝对不是一百万年来获得列表中前一项的好方法。

该代码是像您这样的新程序员不应该处理或编写的东西。 嘘,我已经有15年的C ++生涯了,我看着那并感叹……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM