访问void指针的部分内存

时间:2016-10-15 22:35:45

标签: c arrays pointers

我正在使用void指针来存储数据并将数据复制到一堆数组中。我试图这样做,以便如果一个数组填满,我继续将剩余的数据写入一个新的数组。 例如,我有一个100字节的无效指针。我想把它全部写成一个数组。该阵列只有50个字节的空间,因此我想将剩余的50个写入具有可用空间的不同阵列。 是否可以“索引”void指针的数据,以便我不重用前50个字节并可以访问最后50个字节?

1 个答案:

答案 0 :(得分:4)

仅使用void指针,不。

在为数组编制索引时,请说:

array[10]

您正在取消引用此地址的内容。

如果类型为char *的数组,那么它将没有问题,因为char是一个完整的类型。 (完成后,了解编译器知道它在内存中的表示形式:1个字节)

因此,编译器可以知道每个" case"的大小。并生成给出第9个元素的指令(第1个是*数组或数组[0])

现在让我们假设您使用void *指针,并尝试访问第9个元素。

编译器根本无法知道它所指向的数据大小是多少.void不是一个完整的类型。所以它无法进入任何指数。

所以只使用void指针,不可能。

但是你可以转换你的void指针使它成为一个完整的类型。

例如:

void * destination; 
char * array = malloc(sizeof(char) * 512);
destination = array;

((char *)destination)[10] = 'n';

完全有效。