2014-01-30 1 views
1

이것은 간단한 질문 일지 모르지만 나는 그런 식으로 된 적이 없습니다. 우선 GCC 컴파일러에서 표준 C로 작업하고 있다고 말하면서 임베디드 시스템을위한 것입니다.포인터와 구조가 함수를 통해 전달됨

평균 배열, 누적 합계, 제로 오프셋, 배율 인수, 제수 인수 및 평균 배열에 대한 포인터를 보유하는 구조를가집니다. 기본적으로 다음과 같이 선언했습니다.

typedef struct tag_avgAry { 
    int array[AVG_ARRY_LEN]; 
    int *start; 
    int *current; 
    int *end; 
    long sum; 
    int avg; 
    int factor; 
    int zero; 
    int value; 
    unsigned char scale; 
} avgAry; 

문제는 다음과 같습니다. 이 typedef 및 데이터 변수로 만든 구조체를 새 데이터로 실행 평균 및 배열 테이블을 업데이트하는 함수에 전달해야합니다. 이미 함수 선언 :

void processArray(int data, avgAry array) 

지금 나는 내가 실제로 구조를 수정하고있어 난 그냥 사본을 전달하고 있지 않다하지만 어떻게 그렇게 * 에 배열배열을 변경해야합니다 알고 그런 다음 구조체의 일부인 포인터를 처리합니다.

*phA.current++ = 8; 

을 그리고 "시작"에 대해 "현재"포인터를 확인합니다 : 내 stucts 중 하나가 다음 구조의 배열의 현재 요소에서 숫자 8을 저장하는 PHA를 호출하면 즉 내가 작성합니다 와 "끝"포인터와 나의 이해이기 때문에 나는 구조에서 포인터를 참조 어떻게 ...

processArray(8,(avgAry *)(&phA)); 

를 필요한 경우 재설정 ... 그러나 나는 다음과 같이 processArray 함수를 호출을 통해 그것을 할 경우에 그 액세스, 말하자면, 내가 쓸 함수의 phA의 합계 요소 :

*array.sum = data; 

포인터 전류에 액세스하려면이 방법을 쓰겠습니까?

*(*array.current)++ = data; 

미안 해요, 그 그냥 ... 너무 많은 시간 같아요 ASM을하고 지출 된 포인터와 구조와 깊이에이를 얻어야했다 한 이후 오랜 시간이되었습니다.

답변

0

*(*array).current이어야하지만 *array->current 만 사용할 수 있습니다.

4

하여 더 -> 오퍼레이터 (*theValue).theMember 대한 속기이고 포인터 멤버를 액세스하기위한 바람직한 방법이다

array[0]->current += data; 

다음 될 배열 요소에 액세스 할 수있는 관용적 인 방법. [0] 인덱서 구문은 배열 요소에 액세스하는 데 선호되는 방법입니다. 배열에 직접 *을 사용하면 포인터 연산을 수행하는 경우에도 허용됩니다.

+0

... 아주 많이! 나는 OP 질문을 읽고 있었고 그것을 끝내기 전에 화를 냈습니다. 제라드는 정신과 평온을 내 마음으로 되돌려주었습니다. – speeder

+0

확인. 나는 그것을 이해한다고 생각하지만, 내 상황에서 들어오는 멤버는 단순하게 배열로 불리며 간단하게 말합니다. 실제로는 배열이 아니라 여러 변수, 포인터 및 구조체의 멤버 인 정수 배열이 포함 된 구조체입니다. 그래서 나는 여전히 [0]을 떠나는 것과 같은 방법으로 그것을 할 것입니까? – balmerjd

+0

@ user3221422는'array'의 정확한 타입을 알아야합니다. – JaredPar