我正在使用 void 指针将数据存储和复制到一堆数组中。我试图做到这一点,如果数组填满,我会继续将剩余的数据写入新数组。例如,我有一个 100 字节的 void 指针。我想将所有这些都写入一个数组。该数组只有 50 个字节的空间,因此我想将剩余的 50 个字节写入具有可用空间的不同数组中。是否可以对 void 指针的数据进行“索引”,这样我就不会重用前 50 个字节而可以访问最后 50 个字节?
小智 5
只使用空指针,不。
当你索引一个数组时,让我们说:
array[10]
Run Code Online (Sandbox Code Playgroud)
你正在取消引用它作为这个地址。
如果 array if 类型char *那么它不会导致问题,因为 char 是一个完整的类型。(完全理解编译器知道它在内存中的表示:1 字节)
因此,编译器有可能知道每个“case”的大小并生成给你第 9 个元素的指令(第一个是 *array 或 array[0] )
现在假设您使用 void * 指针,并尝试访问第 9 个元素。
编译器根本无法知道它指向的数据的大小是多少。 void 不是一个完整的类型。所以它不能去任何索引。
所以只使用 void 指针,不,这是不可能的。
但是您可以强制转换 void 指针以使其成为完整类型。
例如 :
void * destination;
char * array = malloc(sizeof(char) * 512);
destination = array;
((char *)destination)[10] = 'n';
Run Code Online (Sandbox Code Playgroud)
是完全有效的。