yx0124 发表于 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);
}


鱼小木 发表于 2023-11-17 10:48:46

AI上线:
这两种方式的区别在于参数传递和变量的作用域。

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

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

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

庄永 发表于 2023-11-17 23:37:24

方式1复用性不好,方式二较好。既然对数据做了封装,建议使用方式二,即使再增加Demo1,Demo2都可以使用同一个接口
页: [1]
查看完整版本: 关于获取变量值的问题