【发布时间】:2014-09-05 10:49:44
【问题描述】:
我有以下结构:
struct Map {
void* arr; // includes pointers to certain blocks of memory
int mem_block_count;
};
void* arr 保存指向内存中某些单元的指针。每个单元格都包含一个指向内存中另一个单元格的 void* 指针(作为链表)、一个 char* 字符串和一个具有自己大小的值。
您应该能够通过执行 arr[i] 其中 i 是一个索引来获取这些指向单元格的指针之一 - 对吗?
我正在尝试访问指向其中一个单元格的第一个指针,它可能是 arr[0]。然后,我想访问指向内存中下一个单元格的指针。但这是 void 类型。那么我该怎么做呢?为了访问 char*,我只是在内存中前进,然后执行 strcpy。但是我如何获得访问/取消引用下一个指针?
编辑:我还考虑将 void 指针转换为 int,但我不确定我会得到正确的值。比如:
int *next_pointer;
next_pointer = (int*) map->arr[i]
但是当我将 this 转换为 int 时,这不是保留指向指针的指针吗?如何正确取消引用指向指针的指针?
编辑 - 因为它是一个指针链表,我难道不能也执行类似的操作 - map->arr + index * sizeof(void*) 来到达给定单元格的开头吗?
【问题讨论】:
-
arr总是指向同一种结构,还是不同的arr可以指向不同的结构? -
你需要指针指向:
void **arr; -
void *arr;是单个指针,而不是“指针”。如果您的意思是它指向存储一些指针的内存块,那么您必须在取消引用之前提供这些详细信息。void *不记得它是从哪里来的。 -
@pmg 抱歉,指针指向哪里?
-
@MattMcNabb 所以 void *arr 指向内存中的第一个“单元”,并且由于每个单元都有一个指向其中下一个单元的指针,这就是它变成“数组”的方式