Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中通过多个方法通过引用传递-值丢失_C_Reference_Pass By Reference - Fatal编程技术网

在C中通过多个方法通过引用传递-值丢失

在C中通过多个方法通过引用传递-值丢失,c,reference,pass-by-reference,C,Reference,Pass By Reference,我有多个通过引用传递变量的嵌套方法,但引用似乎丢失在堆栈中的某个位置,相反,它创建了值的副本,因此值不会被更新 这是我的C代码: 方法1.c、方法2.c、方法3.c、方法4.c: uint8_t *signal_in_methods = 0; void method_1(void *param){ uint8_t *sig = (uint8_t*)param; method_2(sig); } void method_2(uint8_t *sig){ method_3(sig);

我有多个通过引用传递变量的嵌套方法,但引用似乎丢失在堆栈中的某个位置,相反,它创建了值的副本,因此值不会被更新

这是我的C代码:

方法1.c、方法2.c、方法3.c、方法4.c:

uint8_t *signal_in_methods = 0;

void method_1(void *param){
  uint8_t *sig = (uint8_t*)param;
  method_2(sig);
}

void method_2(uint8_t *sig){
  method_3(sig);
}

void method_3(uint8_t *sig){
  method_4(sig);
}

void method_4(uint8_t *sig){
  signal_in_methods = *sig;
  //uses the signal_in_methods in separate thread, but this value is not updated when updated in main function
  ...
  while(1) {
    sleep(1000);
    uint8_t signal = *signal_in_methods;
    printf("%d",signal);
  }
}
uint8_t signal = 0;

main() {
  method_1(&signal);

  while(1) {
    signal = update_signal()//this method continuously changes the value 'signal'
  }
}
main.c:

uint8_t *signal_in_methods = 0;

void method_1(void *param){
  uint8_t *sig = (uint8_t*)param;
  method_2(sig);
}

void method_2(uint8_t *sig){
  method_3(sig);
}

void method_3(uint8_t *sig){
  method_4(sig);
}

void method_4(uint8_t *sig){
  signal_in_methods = *sig;
  //uses the signal_in_methods in separate thread, but this value is not updated when updated in main function
  ...
  while(1) {
    sleep(1000);
    uint8_t signal = *signal_in_methods;
    printf("%d",signal);
  }
}
uint8_t signal = 0;

main() {
  method_1(&signal);

  while(1) {
    signal = update_signal()//this method continuously changes the value 'signal'
  }
}

如何正确地通过这些多个方法传递引用,以便在主函数中更改变量时,所有方法都能看到更改?

uint8_t*sig=*(uint8_t*)参数不应编译(或至少发出警告)-您正在将
uint8\u t
分配给
uint8\u t*
uint8\u-in-u-methods
是一个值-它无法“知道”在最新代码更改行
signal\u-in-u-methods=*sig之后,其他值是否发生了变化应该给予警告谢谢你的评论,我相应地更新了我的代码(见上文),但是方法4中的值不会改变。如何解决这个问题?在做任何其他事情之前,请配置编译器,以便看到这些错误的错误消息(例如
signal\u in_methods=*sig;
)。