我正在尝试将十进制整数添加到地址。 (我对地址不是很清楚,我想它的工作方式是十六进制):
//node_t is a structure with an int and node_t* ptr, so i have the size 8
int move = sizeof(node_t) + size; //here node_t is 8, size is 10
//so actually i want to move it by 18bytes.
node_t* tmp = (current)+sizeof(node_t) / sizeof(node_t) + size/sizeof(int)
//current is the starting address, i try to get current moving positively with 18 bytes
但是事实证明tmp
仅比current
大16个字节。
我认为问题在于大小被识别为十六进制,我该如何解决呢?
答案 0 :(得分:2)
这没有太大意义:
node_t* tmp = (current)+sizeof(node_t) / sizeof(node_t) + size/sizeof(int)
指针算术通过添加许多元素而不是字节来工作。 您似乎尝试通过划分大小来解决此问题,但这无法正常工作。
根据表达式,我假设current
的类型为node_t*
。
添加sizeof(node_t) / sizeof(node_t)
基本上会将其移动到当前位置之后。您也可以只使用1
。
然后添加size/sizeof(int)
。
在这里,您假设元素的大小不同:int
而不是node_t
。
您提到node_t
的大小为8。如何将10除以8? 10/8
为1,整数除法。
这意味着您始终要移动2个元素,即16个字节。
您可以改用这种丑陋的技巧:
node_t* tmp = (node_t *)(((char*)current) + sizeof(node_t) + size);
如果您对硬件没有严格的对齐限制,则可以使用此功能。
否则,您需要四舍五入到下一个对齐的地址。