【发布时间】:2020-12-29 02:14:37
【问题描述】:
第一次来电,长期倾听。我有一个关于一些 void * 指针的问题,似乎找不到解释,所以也许这里有人可以解释一下。
我有一个处理函数,其中(除其他外)我声明了一个 void 指针并通过引用将其传递给其他函数:
void some_handler(some args)
{
void * p_out_data;
some_other_function(&p_out_data);
// ... do some stuff with p_out_data after some_other_function stores an address
}
在 some_other_function 中我 malloc 一些内存(多少取决于几个因素),将 a_bunch_of_data 复制到其中,并将其地址存储在 p_out_data 中,以便 some_handler 可以访问 a_bunch_of_data:
void some_other_function(void * pp_out_data) // pp_out_data is the address of p_out_data
{
void * p = malloc(d_size);
memcpy(p, &a_bunch_of_data, d_size);
memcpy(pp_out_data, &p, sizeof(p));
}
这一切都很好。我的问题是:为什么我可以将 malloc() 返回的内存地址存储到 p_out_data 的唯一方法是使用 memcpy?我尝试将地址直接存储在取消引用的指针中:
*pp_out_data = malloc(d_size);
但我收到有关非法使用 void 指针的错误。我知道有一堆关于 void 指针的规则,所以我猜这里有一个适用的特定规则?
【问题讨论】:
-
pp_out_data 应该是指向
void*的指针。你怎么写“指向void*的指针”?
标签: c void-pointers