2013-10-23 3 views
0

선생님이 오늘 프로그래밍 수업에 질문을 던졌고 어떻게 답을 얻었는지 이해하지 못합니다. 나는 누군가가 나에게 설명 할 수 있기를 바랬다. 우리는 기본적으로 프로그램 결과물을 보여 주어야하지만 질문에 대한 대답을 얻는 방법에 대해 다소 혼란 스럽습니다. 문제는 다음과 같다 :C 프로그래밍? 포인터를 사용하여

#include <stdio.h> 
    void do_something (int , int *); 

    int main (void) 
    { 
     int first = 1, second = 2 ; 
     do_something(second, &first); 
     printf("%4d%4d\n", first, second); 
     return (0); 
    } 

    void do_something (int thisp, int *that) 
    { 
     int the_other; 
     the_other = 5; 
     thisp = 2 + the_other; 
     *that = the_other * thisp; 
     return; 
    } 

대답

35 and 2 
+7

어떤 라인을 이해하지 못 했습니까? – Gangadhar

+2

디버거를 사용하십시오 (IDE 사용법을 알고 있다면), 단계별로 프로그램을 실행하고 진행 상황을 검사하십시오. 또는 인쇄 명령을 삽입하십시오. –

+1

@Nick : 함수 정의는 'void do_somthing (int this, int * thatp);'라고 할 것입니다. – legends2k

답변

1
thisp = 2 + the_other; 
*that = the_other * thisp; 

수단 :

thisp = 2 + 5 
*that = 5 * 7 

그리고 that 메인에 first의 주소를 포함 35 Seconddo_something에 덮어 쓰기 2.

+1

고마워, 정확히 내가 무엇을 찾고 있었는지. 당신의 도움을 주셔서 감사합니다. – Nick

3

함수 do_something에는 2 개의 매개 변수가 있습니다.

  1. 정상 정수 (thisp) 정수로
  2. 포인터. 선생님은 당신이 배우고 싶었다 무엇

이 (즉), 값에 의해 패스와 주소로 패스.

값을 전달할 때 원래 값은 변경되지 않습니다. 이것은 주어진 예에서 그렇기 때문입니다. 변수 second의 값이 thisp 변수로 복사됩니다.

주소를 통한 전달에서 원래 값은 함수 내에서 수정할 수 있습니다. 포인터 that이 변수 first의 위치를 ​​가리키고 있기 때문입니다. 따라서 that의 값이 변경되면 first의 값도 변경됩니다. first의 값이 출력 변화되고 second의 값이 영향을받지 않는 이유

이다.

+1

'C '에는'pass by reference'가 없습니다. 개체는 항상 복사본을 만듭니다. 잘못된 설명. – Sadique

+0

사과드립니다. 주소로 전달하겠습니다. – Sorter

관련 문제