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