gpt4 book ai didi

c - 为 void* 赋值

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

在 C 中,fread() 有一个 void* 参数,它将被赋予从文件中读取的下一个字节 block 的值。我的理解是使用 void* 以便可以为函数提供多种数据类型。但是,当我尝试在自己的函数中使用这种类型的参数时,似乎不允许将值赋给 void*。

例如:

void* ptr = malloc(sizeof(int));
int n = 5;
*ptr = n; //Error here

这给出了一个错误,指出 void 不可赋值。如果是这种情况,那么它在 fread() 中是如何工作的?

最佳答案

fread 的实现与您无关,但大概它会从您的 void 指针创建一个类似 char 的指针,并假设您提供的指针已创建来自有效的非空对象指针。例如:

你:

int data[10];

fread(data, sizeof(int), 10, fp);

恐惧:

size_t fread(void * ptr, size_t sz, size_t nmemb, FILE * fp)
{
char * dst = ptr;
// read data into *dst in chunks of sz bytes
// ...
}

这是有道理的,因为您可以将任何对象视为字符数组,但传递 void * 参数更简单,因为从对象到 void 指针的转换是隐式的,不需要显式转换.

关于c - 为 void* 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736094/

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