2011-05-13 8 views
2

는 함수 입력 정수의 평균을 계산 avg(int, ...), 변수 매개 변수를 허용하는 함수에 변수 매개 변수를 전달하는 방법은 무엇입니까?

avg(1,2,3) = 2, avg(2,3,4,5,6) = 4 

지금 내가,
을 평균 값을 얻을 수 avg()를 사용할 필요가 정수의 배열하지만 배열의 크기가 어쩌면, 동적이있다 stdin 또는 파일에서 읽습니다.

코드 예 : avg() 함수를 한 번만 호출해야한다는

int i, num; 
scanf("%d", &num); 
int *p = malloc(num * sizeof(int)); 
for(i = 0; i < num; ++i) 
    scanf("%d", &p[i]); 
// what should I do now? 
// avg(p[0], p[1],....) 

참고.

- 편집 -
avg() 함수는 예제 일뿐 실제 함수는 그보다 복잡합니다.

답변

0

pp이 가리킬 수있는 요소의 수를 전달하십시오. 함수에서

float computeAverage(int *p, int count) ; // count being `num` in this case. 

0-1 카운트 모든 요소들의 합이 계산 될 수있는 반복 처리하는 루프를 갖는다. 루프가 끝나면 평균값 인 sum/count을 반환하십시오.

+0

빠른 답장을 보내 주셔서 감사합니다. 사실이 함수는 예제 함수이고 실제 문제는 훨씬 더 복잡하며 자체 구현을 만드는 대신 사전 정의 된 함수를 사용해야합니다. – tfengjun

+1

@tfengjun - @davmac에 따르면 포인터를 전달하는 것 외에는이 작업을 수행 할 수있는 휴대용 방법이 없다고 제안했습니다. 행운을 빕니다. – Mahesh

+0

당신은 나에게 비 휴대용 방식으로 그것을 다루는 방법에 대한 힌트를 줄 수 있습니까? 내 코드는 Linux x86에서만 실행됩니다. – tfengjun

4

이 작업을 수행하는 휴대용 방법이 없습니다. varargs 함수가있을 때 대부분의 경우 배열 매개 변수를 직접 받아들이는 variant가 있습니다.

+0

실제로 varargs 함수가 있지만 배열을 허용하지 않습니다. 나는 리눅스에서 x86에서이 일을하고 있는데,이 문제를 해결하기위한 트릭이 있습니까? – tfengjun

+0

gcc의 __builtin_apply() 함수 (gcc 문서 확인)를 사용할 수도 있지만 ARGUMENTS 데이터의 형식을 알고 있어야합니다 (문서화되지 않았으며 플랫폼에 따라 다름). – davmac

관련 문제