gpt4 book ai didi

c - 访问 void 指针的部分内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:01 25 4
gpt4 key购买 nike

我正在使用 void 指针将数据存储和复制到一堆数组中。我试图做到这一点,如果一个数组填满了,我会继续将剩余的数据写入一个新数组。例如,我有一个 100 字节的 void 指针。我想把它全部写到一个数组中。该数组只有 50 个字节的空间,所以我想将剩余的 50 个字节写入另一个具有可用空间的数组。是否可以对 void 指针的数据进行“索引”,这样我就不会重复使用前 50 个字节并可以访问最后 50 个字节?

最佳答案

只保留 void 指针,不。

当你索引一个数组时,比方说:

array[10]

您正在取消引用此地址。

如果数组的类型是 char * 那么它不会造成任何问题,因为 char 是一个完整的类型。 (通过完整,了解编译器知道它在内存中的表示:1 字节)

因此,编译器有可能知道每个“案例”的大小并生成给您第 9 个元素的指令(第 1 个是 *array 或 array[0])

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

编译器根本无法知道它指向的数据的大小。void 不是一个完整的类型。所以它无法访问任何索引。

所以只使用空指针,不,这是不可能的。

但是您可以强制转换您的 void 指针以使其成为完整类型。

例如:

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

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

完全有效。

关于c - 访问 void 指针的部分内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com