gpt4 book ai didi

c - 我想了解如何覆盖一组 C 结构?

转载 作者:行者123 更新时间:2023-11-30 15:57:21 27 4
gpt4 key购买 nike

在为 Apache Web 服务器构建模块时,我遇到过几个实例,其中结构声明表示它只需要 const char* apr_table_t声明中的成员和apr_array_header_t ,但是我在各种模块中找到了示例,例如 mod_security,甚至是新的 ap_parse_form_data函数表明void *数据类型正在被插入到这些结构中。

我的问题是这怎么可能?如果我尝试使用相同的方法,为什么我的 Visual Studio 编译器会提示?

mod_security 就是一个很好的例子,它带有一个 create_request 函数,该函数存储 void *request_rec注意。

最佳答案

指针是可转换的,并且每个对象指针类型都可以转换为void*,即在void*中存储任何指针不会丢失信息。也就是说,以下内容是有效的:

struct Foo a;
struct Foo * p = &a; // p points to a

void * q = p; // OK, can store the value of p in q

struct Foo * r = q; // OK too - we can go back, and r points to a

r->n = 1;

因此,在 C 中通常将指针作为 void* 传递,因为知道这些指针始终可以保存任何其他对象指针值,并且仅将其强制转换回需要时所需的类型。

关于char指针的最后一句话:将任何对象指针转换为char*并实际上将其取消引用为指向数组的指针of chars 构成类型双关,并且不违反严格的别名规则——这只是允许您访问任何对象的底层二进制表示。

关于c - 我想了解如何覆盖一组 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568148/

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