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」または別のメンバーに置き換えられた場合にのみ、値が構造体configに保存されます。問題は、関数呼び出しでメンバーを定義できるようにしたいことです。

助言がありますか?

問題を解決するためにポインタを持ち込む必要がありますか?

4

1 に答える 1

2

int変更するポインタを渡します。

unsigned char changeInt(int *pointVal, ...

値を変更する必要がある場合は、ポインターの参照を解除する必要があります。

*pointVal = ...

関数を呼び出すときは、変更する変数のアドレスを渡します。

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