硬汉嵌入式论坛

 找回密码
 立即注册
查看: 603|回复: 2
收起左侧

关于获取变量值的问题

[复制链接]

10

主题

21

回帖

51

积分

初级会员

积分
51
发表于 2023-11-17 09:32:35 | 显示全部楼层 |阅读模式

咨询大佬们一个问题。下面这两种方式有什么区别吗?

typedef struct
{
        u8 a;
        u8 b;
        u8 c;
}Demo;

Demo demo;
方式1:
void fun1()
{
        if(demo.a == 1)
        {
                demo.a = 2;       
        }
        else if(demo.b == 1)
        {
                demo.b = 2;
        }
        else if(demo.c == 1)
        {
                demo.c = 2;
        }
}

int main ()
{
   fun1();
}
方式2:
void fun2(Demo *data)
{
        if(data->a == 1)
        {
                data->a = 2;       
        }
        else if(data->b == 1)
        {
                data->b = 2;
        }
        else if(data->c == 1)
        {
                data->c = 2;
        }       
}


int main ()
{
     fun2(&demo);
}


回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2023-11-17 10:48:46 | 显示全部楼层
AI上线:
这两种方式的区别在于参数传递和变量的作用域。

方式1中,fun1()函数直接在函数内部操作全局变量demo。全局变量demo在整个程序中都可见,函数可以直接访问和修改它的成员变量a、b和c。这种方式不需要通过参数传递数据,但是全局变量的使用可能会导致代码的可读性和可维护性降低。

方式2中,fun2()函数使用指针作为参数,并接受一个指向结构体Demo的指针作为输入。通过将&demo传递给函数,函数可以通过指针来访问和修改demo的成员变量。这种方式将数据传递给函数,可以使得函数更加灵活,可以操作不同的结构体对象而不仅限于全局变量demo。同时,通过使用指针传递数据,可以减少数据的拷贝,提高效率。

总结起来,方式1直接在函数内部操作全局变量,方式2通过函数参数传递指针,可以操作不同的结构体对象并提高效率。选择使用哪种方式取决于具体的应用场景和需求。
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2023-11-17 23:37:24 | 显示全部楼层
方式1复用性不好,方式二较好。既然对数据做了封装,建议使用方式二,即使再增加Demo1,Demo2都可以使用同一个接口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 10:34 , Processed in 0.158912 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表