2010-07-21 3 views
4

내가 마지막으로 C를 프로그래밍 한 이래로 모든 것을 잊어 버린 것 같습니다. 그 동안 ... 아주 간단한 포인터 질문이 있습니다. 나는 루프 반복을 통해 sum을 계산하는 함수 인 을 가지고 있다고 가정한다. 이 함수는 루프 카운터뿐만 아니라 계산 한 합계도 반환해야합니다. 왜냐하면 나는 단지 값을 반환 할 수 있기 때문에 합계가 포인터를 선언하고 있기 때문에 최선을 다할 것이라고 가정합니다. 다음과 같이 할 수 있습니까?기본 C 포인터 질문

int loop_function(int* sum) 
    { 
    int len = 10; 

    for(j = 0; j < len; j++) 
    { 
     sum += j; 
    } 

    return(j); 
    } 

    .... 


    int sum = 0; 
    loop_function(&sum); 
    printf("Sum is: %d", sum); 

또는 내가 함수에 전달하는 합계를 가리키는 추가 변수를 정의해야합니까?

많은 감사, 마커스

+0

C 또는 C++입니까? – Nikko

+0

순수한 C이어야합니다. – Markus

+0

C++과 원격으로 관련되어 있음을 나타내는 것은 없으므로 C++ 태그를 제거했습니다. –

답변

3

그것은해야 당신이 (당신이 원하는 아마 없을 것) 포인터를 증가한다하고 있습니다 :

*sum += j; 

이므로 값을 증가시킵니다. 로컬 포인터 변수 대신을 가리켰습니다. 당신이해야하는이 라인을 제외하고 올바른

17

: sum 이후

sum += j; 

포인터이며, 이것은 당신이 원하지 않는 무엇이다, j에 의해 포인터에 포함 된 주소를 증가시킵니다. 또한

*sum += j; 

, 당신이 어딘가에 j을 정의해야합니다 : 당신은 값은 다음과 같이 먼저 포인터 참조 연산자 *을 적용하여 수행됩니다 j에 의해 포인터가 가리키는 증가 할 , 그러나 나는 당신이 그것을 알고 있다고 상상하고 단지 감시 일뿐입니다.

+0

+1, 예 j를 정의해야합니다. –

2

당신은 여분의 변수를 만들 필요가 없습니다하지만 루프에서 당신은이 방법에 대해

-1

 *sum += j
을 할 필요가?

이미 int를 반환하고 있습니다. 그래서, 다른 방법 (INT 합)

단지

INT의 loop_function에 서명을 변경하고

INT 합 = 0 호출시;

...

sum = loop_function (sum);

+0

OP는 하나의 함수에서 루프 카운터와 합계 두 가지를 반환하려고합니다. C에서 이것은 일반적으로 포인터를 전달하고 포인터가 가리키는 것을 수정하는 것을 의미합니다. –

+0

아, 사실! 방금 ​​반환 값을 저장하지 않는 OP에서만 정의를 보았습니다. 그러나 지금 당신의 요점을 봅니다. 감사 ! – DeltaRogue

1

다음과 같이 작성해야합니다. * sum + = j;

0

또한 두 개의 값을 저장하는 간단한 구조체를 선언 할 수는 그 구조의 인스턴스에 대한 포인터를 전달 충분하다. 그렇게하면 두 변수를 모두 조작 할 수 있고 함수가 반환 된 후에도 변수가 유지됩니다.

 
struct loop_sum_struct { 
    int loop_ctr; 
    int sum; 
} loop_sum; 

loop_function(&loop_sum); 

void loop_function(loop_sum_struct *s) { 
    int len = 10; 
    for(s->loop_ctr = 0; s->loop_ctr loop_ctr++) { 
     s->sum += s->loop_ctr; 
    } 
}