C++ 将局部变量从FuncA处理为FuncB时出现问题,不应返回

C++ 将局部变量从FuncA处理为FuncB时出现问题,不应返回,c++,c,embedded,C++,C,Embedded,我在funcB中创建了一个函数来更新funcA中的局部变量。但是,当funcB返回时,funcA中的局部变量值似乎与我在funcB中设置的值不一致 请参阅下面的代码片段: typedef enum { A =0, B, C, D, MAX } status_val; int funcA(){ status_val test = A; printf("before getvalue %d\n",test);

我在
funcB
中创建了一个函数来更新
funcA
中的局部变量。但是,当
funcB
返回时,
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
}
输出(实际):


但在我在嵌入式系统中运行的实际代码中,
funcB
返回
funcA
后的值似乎变为一个非常大的数字(67108864)。我现在很困惑:(.这似乎是一个堆栈问题。如果是,有人能指出一些可能的解决方法吗?TIA。

funcB
需要一个
char*
,但您传递的是
状态值*
。枚举类型通常实现为
int
,因此您使用的是不兼容的指针类型

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

void funcB(status_val *val){

突击测验:什么是
sizeof(status\u val)
,或者
sizeof(test)
?提示:根据显示的代码,它不是1,因此您可以自己解决问题的其余部分。@SamVarshavchik谢谢您的回答,我打印了status\u val和test的大小。sizeof statusval=4 sizeof test=4那么,您希望如何通过
char*
,因为
char
sizeof
是1?我相信这个问题对您来说是显而易见的,现在?奇怪的是,在一个在线编译器@SamVarshavchik上也有同样的工作,我得到的不是char而是char*。在funcA中,我在调用funcB-->funcB((char*)&test)时对char执行强制转换所以他们应该是compatible@cabrillosa它们不是。演员阵容是你对编译器撒谎并说它们是。我目前正在编译。但为什么问题只发生在我的power pc项目中,而不发生在其他编译器中?这是通过无效指针类型写入的结果。不一致就是一种表现。猜测您的power pc compiler使用默认的big-endian字节顺序funcB操作/破解MSB。因此您得到了较大的值。使用小endian修补LSB。
before getvalue 0
val inside getvalue=10
value of test=67108864 
void funcB(status_val *val){