2012-04-02 3 views
2

함수에서 로컬 변수를 main으로 다시 전달하려면 어떻게해야합니까? 함수에 이미 반환 값이 있으면 어떻게해야합니까? 죄송합니다. 저는 제 사례뿐만 아니라 모든 사람들이 가능한 한 객관적으로하려고 노력하고 있습니다.C에서 여러 변수를 함수에서 main으로 전달하는 방법은 무엇입니까?

구체적으로 : 나는 subtotal이라는 기능이 있습니다. 두 개의 계수 변수가 있습니다. 그들 중 하나는 return으로 돌아 왔습니다. 다른 하나는 내 main() 함수에서 사용할 수있게해야합니다.

편집 : 명확히하기 위해 :

function something() { 
    float counter = 0.0; 
    int someOtherVar = 0; 

    // the work 

    return someOtherVar; 
} 

는 내가 뭘 원하는 maincounter 플로트를 전달합니다.

답변

9

가 매개 변수로 추가 반환 값에 대한 포인터를 전달 함수.

int foo(int *anotherOutParam) 
{ 
    *anotherOutParam = 1; 
    return 2; 
} 

그리고 그것을 전화는 :

int ret1, ret2; 
ret1 = foo(&ret2); 
//do something with ret2 

때때로하는 struct에 모든 반환 값을 포장 @ 매트의 제안이 바람직하다.

+0

고마워, 알아, 내 질문에 대한 설명을 추가했다. – eveo

+0

내 대답의 코드는 본질적으로 설명에 설명 된 내용을 구현합니다. 'int * anotherOutParam'을'float * counter'로 바꾸면 끝납니다. –

+0

문제는'float * count;'로 정의했는데'count + = anotherVar; '를하려고하면 다음과 같은 오류가 발생합니다 :'잘못된 피연산자를 바이너리 + ('float * '및 'double')'. – eveo

11

모든 반환 값을 struct에 넣고 반환하십시오.

#include <stdio.h> 

struct myret { 
    int total; 
    int count; 
}; 

struct myret foo(void) 
{ 
    struct myret r; 
    r.total = 42; 
    r.count = 2; 
    return r; 
} 

int main(void) 
{ 
    struct myret r = foo(); 
    printf("%d %d\n", r.total, r.count); 
    return 0; 
} 

또는 "기타"반환 값에 대한 포인터를 사용하십시오.

int foo(int *other) 
{ 
    if (other) 
    *other=42; 
    return 1; 
} 

int main(void) 
{ 
    int a = 0; 
    int b = foo(&a); 
    ... 
} 

당신은 또한 당신의 함수에 구조체에 대한 포인터를 전달하여 둘을 결합하고, 함수가 채울 수 :

#include <stdio.h> 

struct myret { 
    int total; 
    int count; 
}; 

int foo(struct myret *r) 
{ 
    if (r) { 
     r->total = 42; 
     r->count = 2; 
    } 
    return 0; 
} 

int main(void) 
{ 
    struct myret r; 
    int rc = foo(&r); 
    if (rc == 0) { 
     printf("%d %d\n", r.total, r.count); 
    } 
    return rc; 
} 
+0

+1 : 인수 목록을 통해 개별 매개 변수를 "반환"하는 동안 첫 번째 예제처럼 캡슐화하는 것이 훨씬 깔끔하고 일반적으로 선호되어야합니다. –

+0

+1 구조체의 모든 요소가 논리적으로 서로 관련되어있을 때만 (IOW, 더 큰 복합 유형의 특성) 캡슐화 된 구조체 반환은 –

+0

에만 해당합니다. 하나의 함수에서 여러 개의 * 관련이없는 * 항목을 반환하는 유일한 목적 *에 대한 집계 유형을 만들지 마십시오. –

관련 문제