我想调用类似下面的函数,其中第一个参数是名为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”或其他成员。问题是我希望能够在函数调用中定义成员。
有什么建议吗?
我是否需要开始引入指针来解决问题?
答案 0 :(得分:2)
将指针传递给您要修改的int
:
unsigned char changeInt(int *pointVal, ...
当您需要修改值时,需要取消引用指针:
*pointVal = ...
调用函数时,传递要修改的变量的地址:
changeConfig = changeInt(&config.Filter, ...