2012-12-07 6 views
2

첫 번째 매개 변수가 config라는 구조체의 멤버 인 경우 다음과 같은 함수를 호출하고 싶습니다. 이 예제에서 멤버는 구조체에서 int로 정의 된 "Filter"라고하고 다른 코드의 변경을 나타내는 char "changeConfig"를 반환합니다. 구조가 30 이상의 회원을 개별적으로 비슷한 방식으로 관리하고 변경해야하는 모든이 있기 때문에함수의 인수로 사용하는 구조체 멤버

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

이 형식은 아래 문제의 매우 좁은 상태로 내 코드를 감소시킬 것이다.

다음 함수 "changeInt"이 값을 받아 intScroll()

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; 
} 

이 모두 잘 컴파일하고 좋은에서 요구하는 값 intMin, intMax 및 INTVAL에게 할당하고 나 변경할 수 있습니다 intScroll() 함수의 값이지만 "pointVal"이 "config.Filter"또는 다른 멤버로 바뀌면 값을 구조체 구성에 다시 저장합니다. 문제는 함수 호출에서 멤버를 정의 할 수 있기를 원한다는 것입니다.

제안 사항?

문제를 해결하기 위해 포인터를 가져와야합니까?

답변

2

수정하려는 int에 대한 포인터 패스 : 전화

*pointVal = ... 

:

unsigned char changeInt(int *pointVal, ... 

당신이 값을 수정해야하는 경우를, 당신은 포인터를 참조를 해제해야합니다 함수를 수정하려는 변수의 주소를 전달하십시오.

changeConfig = changeInt(&config.Filter, ... 
+0

유일한 문제는 s me는 changeconfig (& config.Filter, ....) 행의 "포인터 유형 간의 잘못된 변환"오류이지만 여전히 작동합니다. 대단히 고마워요. – user1885922

+0

@ user1885922'config.Filter'의 종류는 무엇입니까? –

+0

글쎄, 나는'config.Filter'가'int'라고 가정하고 있었다. 그것이 다른 것이라면 유형을 일치시켜야합니다. –

관련 문제