2

我想调用如下函数,其中第一个参数是名为 config 的结构的成员。在此示例中,该成员称为“Filter”,该成员在结构中定义为 int 并返回 char“changeConfig”以表示对其他代码的更改。

changeConfig = changeInt(config.Filter, 0, 9, LCD_PPM);

这种格式会将我的代码减少到一个非常有限的事务状态,因为该结构有 30 多个成员,所有这些成员都需要以类似的方式单独管理和更改。

以下函数“changeInt”接收值并将它们分配给 intScroll() 所需的值 intMin、intMax 和 intval

unsigned char changeInt(int pointVal, int iMin, int iMax, char mode){

unsigned char configChange = 0;
dp = 0;
intMin = iMin;
intMax = iMax;
intVal = pointVal;

while(((keyPadBits & MENU) != MENU) && (timeout < TIMEOUT)){
    intScroll();

    if(keyPadBits & ENTER){
        pointVal = intVal; //config.Filter = intVal;  //config->Filter?
        confirmMin();
    }
}

return changeConfig;
}

这一切都编译得很好,并且允许我更改函数 intScroll() 中的值,但是如果将“pointVal”替换为“config.Filter”或其他成员,它只会将值保存回结构配置。问题是我希望能够在函数调用中定义成员。

有什么建议么?

我是否需要开始引入指针来解决问题?

4

1 回答 1

2

传递一个指向int您要修改的指针:

unsigned char changeInt(int *pointVal, ...

当需要修改值时,需要取消引用指针:

*pointVal = ...

调用函数时,传递要修改的变量的地址:

changeConfig = changeInt(&config.Filter, ...
于 2012-12-07T16:06:07.980 回答