You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中函数间传递信息的实现方案咨询

C函数间多数据传递的最优方案

针对你遇到的问题,用结构体打包相关数据是最优雅的解决方案,既避免了全局变量的风险,又解决了多指针传递的繁琐问题,具体实现如下:

1. 定义数据结构体

把鼠标相关的所有数据(比如坐标、按键状态等)打包到一个结构体里,后续扩展只需添加字段即可:

// 定义存储鼠标状态的结构体
typedef struct {
    int x;  // 鼠标X坐标
    int y;  // 鼠标Y坐标
    // 可扩展:比如添加按键状态(如left_button_pressed)、滚轮值等
} MouseState;

2. 修改主函数传递结构体指针

在主函数中创建结构体实例,通过指针传递给两个函数:

// 注意:C标准中没有原生的true,建议用1代替或自行定义
#define true 1

int main() 
{
    MouseState mouse = {0};  // 初始化鼠标状态变量
    while(true)    
    {
        mousecommands(&mouse);  // 传递结构体指针,让函数能修改内部数据
        graphicupdate(&mouse);  // 读取结构体中的鼠标位置
    }
}

3. 实现两个业务函数

  • mousecommands 接收结构体指针,更新鼠标位置:
void mousecommands(MouseState *mouse) {
    // 替换为实际的鼠标位置检测逻辑
    // 示例:假设你有获取鼠标坐标的API
    mouse->x = get_mouse_x();
    mouse->y = get_mouse_y();
}
  • graphicupdate 接收结构体指针,使用坐标绘制圆形:
void graphicupdate(MouseState *mouse) {
    // 替换为实际的绘图逻辑
    // 示例:以鼠标坐标为圆心绘制半径10的圆形
    draw_circle(mouse->x, mouse->y, 10);
}

方案优势

  • 逻辑清晰:把鼠标相关数据聚合在一起,符合模块化设计思想,代码可读性更高
  • 扩展性强:后续要添加新的鼠标数据(如按键状态),只需修改结构体,无需调整函数参数
  • 安全性高:相比全局变量,结构体是局部变量,只有通过指针主动修改才会改变数据,避免意外修改的风险

内容的提问来源于stack exchange,提问作者Drake Vimes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:51:02