在C语言面试中我被问到一个问题。问题是:我可以更改地址吗?
struct node * root;根=(INT *)malloc的(的sizeof(int)的);
printf(“%d”,root)= 10128000 //新地址:root = 101590000
C标准库的分配函数都不允许您指定希望分配空间的地址。这样做是没有意义的,因为程序员不太可能知道或关心他们得到的具体地址,除非他们已知的东西已经存在,在这种情况下,它不是可用的地址。
但是,您可以分配一个大块(例如通过malloc
),然后根据需要手动分配该块的块。这允许您选择相对于已分配块的基础的自己的地址。例如:
my_node *node_base = malloc(AS_MUCH_MEMORY_AS_I_NEED);
// ...
// malloc analog:
size_t an_index = choose_a_node_index_by_some_criteria();
my_node *node = node_base + an_index;
// free analog:
mark_index_available_again(an_index);
当然,魔鬼在细节中,这些都是针对你的需求而且比我准备进入这里更复杂。总的来说,这不是一个自我宣传的初学者应该尝试做的事情。