打印
[开发工具]

void*和C结构体

[复制链接]
670|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OKAKAKO|  楼主 | 2024-8-31 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问:你能设计一个能接受任何类型的参数并返回interger(整数)结果的函数吗?

答:如下:

int func(void *ptr)
如果这个函数的参数超过一个,那么这个函数应该由一个结构体来调用,这个结构体可以由需要传递参数来填充。

使用特权

评论回复
沙发
公羊子丹| | 2025-4-5 07:40 | 只看该作者
这个方法思路挺有意思的!用 void* 作为函数参数,确实可以让函数接受任何类型的数据,但要小心类型转换的问题。

使用特权

评论回复
板凳
周半梅| | 2025-4-5 07:41 | 只看该作者
如果结构体里有多个参数,使用 void* 和结构体封装会更灵活。就是要确保传入的指针能正确解析每个成员。

使用特权

评论回复
地板
帛灿灿| | 2025-4-5 07:42 | 只看该作者
设计这类函数时,一定要保证你知道传入 void* 的实际类型,否则强制转换时可能会导致内存问题。

使用特权

评论回复
5
童雨竹| | 2025-4-5 07:43 | 只看该作者
这种方式最适合处理类型不定的情况,像是回调函数或者多态行为。但是,维护时需要注意 void* 的安全性。

使用特权

评论回复
6
万图| | 2025-4-5 07:44 | 只看该作者
之前我也有用过类似的做法,在 void* 里封装一个结构体,灵活又方便,只是你需要小心内存管理,确保不会泄漏。

使用特权

评论回复
7
Wordsworth| | 2025-4-5 07:45 | 只看该作者
我看你用了结构体来组织多个参数,这是不错的做法。这样调用函数时,代码清晰,维护起来也不容易出错。

使用特权

评论回复
8
Bblythe| | 2025-4-5 07:45 | 只看该作者
如果有多个结构体类型传入同一个函数,可能需要根据某个标志位来判断类型,类似于 C++ 中的 typeid 功能。

使用特权

评论回复
9
Pulitzer| | 2025-4-5 07:46 | 只看该作者
对于这种泛型编程方式,我曾经用过 union 来处理不同类型的值,这样可以节省内存,避免内存浪费。

使用特权

评论回复
10
Uriah| | 2025-4-5 07:47 | 只看该作者
如果结构体成员比较多,考虑使用 malloc 动态分配内存,这样避免了局部变量占用栈空间太大,但要注意释放内存。

使用特权

评论回复
11
Clyde011| | 2025-4-5 07:48 | 只看该作者
这种设计方法也可以应用在面向对象的编程思想中,提供了一种处理不同数据类型的方式。虽然是 C 语言实现,但可以模仿多态的特性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

241

主题

1819

帖子

4

粉丝