如何正确将十进制整数添加到地址

时间:2018-11-22 15:47:22

标签: c pointers

我正在尝试将十进制整数添加到地址。 (我对地址不是很清楚,我想它的工作方式是十六进制):

//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个字节。

我认为问题在于大小被识别为十六进制,我该如何解决呢?

1 个答案:

答案 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);

如果您对硬件没有严格的对齐限制,则可以使用此功能。

否则,您需要四舍五入到下一个对齐的地址。