将局部变量从 FuncA 操作到 FuncB 时出现问题,并且 return 不是预期的

Problem manipulating local variable from FuncA to FuncB and return is not expected

我在 funcB 中创建了一个函数来更新 funcA 中的局部变量。但是,当 funcB returns 时, funcA 中的局部变量值似乎与我在 funcB.

中设置的值不对应

参见下面的代码片段:

typedef enum {

    A =0,
    B,
    C,
    D,
    MAX
} status_val;
int funcA(){
    
    status_val test = A;

    printf("before getvalue %d\n",test); //<-- this prints 0
    funcB((char*)&test);
    printf("value of test=%d\n", test); //PROBLEM: this prints a very large number. ex. 67108864 in my actual project
    
}

void funcB(char* val){
    
    *val = 10;
    printf("val inside getvalue=%d\n", *val); //<-- this prints 10
}

输出(预期):

before getvalue 0
val inside getvalue=10
value of test=10

输出(实际):

before getvalue 0
val inside getvalue=10
value of test=67108864 

但是在我的嵌入式系统中的实际代码运行中,funcAfuncBreturn之后的值似乎变成了一个非常大的数字(67108864) .我现在很困惑:(。这似乎是一个堆栈问题。如果是的话,任何人都可以指出一些可能的方法来解决这个问题吗?TIA。

funcB 期待 char *,但您传递的是 status_val *。枚举类型通常实现为 int 类型,因此您使用的是不兼容的指针类型。

更改 funcB 以接受正确的类型:

void funcB(status_val *val){