假设我们有一个char数组:
char pool[1000];
和指针
char* ptr;
指针将地址存储到Pool中的数据块。我想将这个地址存储在池中并检索它。
基本上,我想要做的是嵌入在char数组Pool中的链表。原因是我不允许创建任何新的变量(全局),并且我不能包括新的标题,以及其他限制。
所以问题是:如何对pool []的前4个元素进行分段和拟合(比方说),以及如何再次检索它以进行修改。
此操作将经常发生,因此需要快速...当然不依赖于外部功能。
答案 0 :(得分:1)
要在ptr
中存储pool
的值,请使用:
memcpy(pool, &ptr, sizeof(ptr));
要从pool
检索指针的值,请使用:
memcpy(&ptr, pool, sizeof(ptr));
回复:
此操作将经常发生,因此需要快速...当然不依赖于外部功能。
memcpy
正是您所需要的。如果您无法使用memcpy
,则需要在代码中实现确切的功能。
除非您能够验证对memcpy
的调用是性能瓶颈,否则我建议您使用它。
答案 1 :(得分:0)
如果你想在池中存储ptr,那么你应该有一个地址池吗?
char *pool[1000];
然后
pool[0] = ptr;
ptr = pool[0];
etc.
如果你必须处理一个字符缓冲区,那就是
char pool[1000];
但将其视为地址缓冲区,然后通过创建局部变量来弯曲它:
char **pp = reinterpret_cast<char**>(&pool);
*pp = ptr;
后者将ptr存储在缓冲池的开头。要检索它:
ptr = *pp;
您可以通过递增指针pp
pp++ // next address
并且不要假设地址是4个字节!