gpt4 book ai didi

c - 在 C 中使用其大小取消引用 void 指针

转载 作者:行者123 更新时间:2023-11-30 18:51:03 24 4
gpt4 key购买 nike

我知道我们不能取消引用 void 指针,除非我们对其进行类型转换。

void *ptr = call_a_function();
printf("%d",*(int *)ptr);

这会将元素的数据类型(在本例中为整数)告知编译器,以便编译器可以取消引用它所需的空间量(在本例中为 4 个字节)。

假设我不知道最终的数据类型,但我知道数据类型的大小。我仍然可以仅使用大小(4 字节)而不使用数据类型(不使用 int)来取消引用它吗??

换句话说,有没有一种方法可以通过提供要提取的字节数而不是数据类型来告诉编译器要读取多少字节的内存?

编辑 -

我需要交换两个 void * 指针的内容。

受到交换两个值的常规方式的影响,即将一个指针的值存储在临时变量中,然后继续交换。

尝试在不知道数据类型但只知道其大小的情况下尝试相同的操作(因为具有此交换代码的函数接受变量的大小作为一个参数)。然而,在阅读答案和评论后,我意识到我真的不需要取消引用它。可能memcpy是正确的方法。

最佳答案

Suppose I dont know the final datatype, however I know the size of datatype. Can I still dereference it using only the size(4 bytes) and not the datatype(not using int)??

由于您无法推断或假定数据类型,因此您无法一次取消引用指针来获取完整的对象。但是,您可以提取每个字节并按照您想要的方式使用它。

void *ptr = call_a_function();
unsigned char* cptr = (unsigned char*)ptr;
for (int i = 0; i < num_bytes; ++i )
{
unsigned char c = cptr[i];
// Use c
}

关于c - 在 C 中使用其大小取消引用 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38358084/

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