C语言中作为指针和返回值的函数参数
在函数中,我需要传入myFlg和somVar作为输入参数。使用函数修改它们,然后返回newLevel 我是否传递myFlg和somVar的指针,以及如何传递。flg和计数器需要在函数内部更新,但它们不是全局的。因此,传入两个参数/指针并返回一个值、一个返回值和两个修改后的值/指针C语言中作为指针和返回值的函数参数,c,pointers,C,Pointers,在函数中,我需要传入myFlg和somVar作为输入参数。使用函数修改它们,然后返回newLevel 我是否传递myFlg和somVar的指针,以及如何传递。flg和计数器需要在函数内部更新,但它们不是全局的。因此,传入两个参数/指针并返回一个值、一个返回值和两个修改后的值/指针 in flags.h #define FlagReg1set_u 0b01000001 typedef union { struct { uint8_t Fl
in flags.h
#define FlagReg1set_u 0b01000001
typedef union
{
struct
{
uint8_t Flg1 : 1;
uint8_t Flg2 : 1;
uint8_t Flg3 : 1;
uint8_t Flg4 : 1;
uint8_t Flg5 : 1;
uint8_t Flg6 : 1;
uint8_t my_Flg : 1;
uint8_t foo : 1;
} bits;
uint8_t byte;
} FlagReg1_t = FlagReg1set_u;
in level.c
uint16_t level(uint8_t Flag, uint8_t SomeVariable, uint8_t SomeCount)
{
static uint16_t newLevel = SomeVariable;
static uint8_t count = SomeCount;
static uint8_t somVar;
if (FlagReg1.bits.my_Flg == 1)
{
/* do something */
newLevel = 0xFFFF;
}
else
{
FlagReg1.bits.my_Flg = 0
}
if (somVar == SomeVariable)
{
count = 0;
}
else
{
count++;
}
return newLevel
}
in main .c
#include "flags.h"
main()
{
/* Variable Declaration */
uint16_t level(uint8_t Flag, uint8_t SomeVariable, uint8_t SomeCount);
uint8_t count = 0;
uint8_t ownlevel;
uint16_t newLevel;
level(FlagReg1_t my_Flg, ownlevel, count);
if (newLevel == 0)
{
//do something
}
else
{
//do something
}
}
好吧,对于社区来说,我使用答案空间,这更多的是一个评论,但我需要工具来解释。 因此,eumac,工会的通常目的是:
typedef union eumac_un_t
{
struct eumac_str
{
uint8_t flag_4;
uint8_t flag_3;
uint8_t flag_2;
uint8_t flag_1;
};
int the_flag;
}eumac_un;
这需要4个字节(一个内存区域),存储相同的数据,这些数据可以通过各种方式检索。
例如,如果您存储
eumac_un_t.eumac_str.flag_1 = 150 //(1001 0110)
eumac_un_t.eumac_str.flag_2 = 20 //(0001 0100)
你得到了什么
eumac_un_t.the_flag == 5270 //its 0000 0000 - 0000 0000 - 0001 0100 - 1001 0110
这就是我们使用工会的原因。所以在你的情况下,你不需要它。清楚吗
现在,在你们的例子中,通常当你们有一个数组时,你们作为指针传递。若标志只是一个整数,那个么你们可以简单地作为一个整数传递它
是的,你提到的功能非常好
uint16_t level(FlagReg1_t *ptrToFlagReg1, uint8_t *SomeVariable, uint8_t *SomeCount)
{
ptrToFlagReg1->something = something;
ptrToFlagReg1->something_else = something_else;
return number_of_something;
}
如果不需要,整数实际上不必作为指针传递
uint8_t SomeVariable, uint8_t SomeCount
如果您选择了snake case脚本,我将不胜感激。出于各种原因,myFlg更适合作为my_标志。您也有各种错误。例如。typedef联合标志{bla}标志;你错过了类型。struct也是一样。你也不清楚联合是什么。这只是一个示例代码,不是真正的代码,我正在寻求帮助,了解如何做我需要的事情,即从函数返回值,更改函数中的变量和结构,这将使更改保持在函数之外。union的用途是能够将所有位设置为默认值,我省略了它。既然您标记了C,那么您最好使用C而不是“测试”代码。union已经在这个项目中使用,我需要修改它。您能否指导我/帮助我在这种情况下使用指针,传入一个标志、一个计数并返回一个值,同时修改标志和计数。函数应该是这样的,uint16_t level(FlagReg1_t*ptrToFlagReg1,uint8_t*SomeVariable,uint8_t*SomeCount),以及main()中对flg,count的声明是什么?为了澄清我已经更改了原始代码示例,这是需要的吗?